PHP code example of alto / json-patch
1. Go to this page and download the library: Download alto/json-patch library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
alto / json-patch example snippets
use Alto\JsonPatch\JsonPatch;
$document = [
'user' => ['name' => 'Alice', 'role' => 'editor'],
'status' => 'draft',
];
$patch = [
['op' => 'replace', 'path' => '/user/role', 'value' => 'admin'],
['op' => 'replace', 'path' => '/status', 'value' => 'published'],
];
$result = JsonPatch::apply($document, $patch);
// ['user' => ['name' => 'Alice', 'role' => 'admin'], 'status' => 'published']
$before = ['version' => 1, 'status' => 'draft'];
$after = ['version' => 2, 'status' => 'published', 'author' => 'Alice'];
$patch = JsonPatch::diff($before, $after);
// [
// ['op' => 'replace', 'path' => '/version', 'value' => 2],
// ['op' => 'replace', 'path' => '/status', 'value' => 'published'],
// ['op' => 'add', 'path' => '/author', 'value' => 'Alice'],
// ]
use Alto\JsonPatch\DiffOptions;
$before = [
'items' => [
['id' => 'a', 'qty' => 1],
['id' => 'b', 'qty' => 2],
],
];
$after = [
'items' => [
['id' => 'b', 'qty' => 3], // Modified and reordered
['id' => 'c', 'qty' => 1], // Added
],
];
$options = new DiffOptions(['/items' => 'id']);
$patch = JsonPatch::diff($before, $after, $options);
// Generates move, add, remove, and replace operations for individual items
// Get a value at a JSON pointer path
$name = JsonPatch::get($document, '/user/name');
// Test if a value matches (returns bool)
$isAdmin = JsonPatch::test($document, '/user/role', 'admin');
// Validate patch structure without applying
$errors = JsonPatch::validate($patch);
class ChangeLog
{
public function recordChange(array $before, array $after): void
{
$patch = JsonPatch::diff($before, $after);
$this->store([
'parent_hash' => hash('sha256', json_encode($before)),
'patch' => $patch,
'result_hash' => hash('sha256', json_encode($after)),
'timestamp' => time(),
]);
}
public function verifyIntegrity(string $recordId): bool
{
$record = $this->fetch($recordId);
$parent = $this->reconstructState($record['parent_hash']);
$result = JsonPatch::apply($parent, $record['patch']);
$computedHash = hash('sha256', json_encode($result));
return $computedHash === $record['result_hash'];
}
}
try {
JsonPatch::apply($doc, $patch);
} catch (JsonPatchException $e) {
// "Operation 0 (replace): path '/missing/path' not found."
// "Operation 1 (add): invalid path '/items/-1'."
}
$options = new DiffOptions([
'/users' => 'id', // Use 'id' field for /users array
'/items' => 'sku', // Use 'sku' field for /items array
]);