A RFC6902 compliant JSON Patch PHP implementation
PHP
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
src Updated for php7 Mar 23, 2016
tests
.gitattributes
.gitignore
.scrutinizer.yml
.travis.yml Updated for php7 Mar 23, 2016
LICENSE
README.md Fixed Typo Sep 18, 2015
composer.json
phpunit.xml

README.md

JSONPointer

License Latest Stable Version Latest Unstable Version Total Downloads

SensioLabsInsight

Build Status

Build Status Code Coverage Scrutinizer Code Quality

A RFC6902 compliant JSON Patch PHP implementation

License

JSONPatch is licensed under the MIT license.

Installation

composer require gamringer/php-json-patch

Tests

composer install
phpunit

Documentation

Operations can be constructed and applied independently

<?php

$target = ['1', '2', '3'];
$operation = new \gamringer\JSONPatch\Operation\Test('/foo', 'bar');
$operation->apply($target);

Operations can also be constructed from a JSON string

<?php

$operation = \gamringer\JSONPatch\Operation\Test::fromDecodedJSON(json_decode('{"path":"/foo","value":"bar"}'));

A patch can be constructed from a set of operations

<?php

$patch = new \gamringer\JSONPatch\Patch();

$patch->addOperation(new \gamringer\JSONPatch\Operation\Add('/foo', 'bar'));
$patch->addOperation(new \gamringer\JSONPatch\Operation\Test('/foo', 'bar'));

A patch can also be constructed from a JSON string

<?php

$patch = \gamringer\JSONPatch\Patch::fromJSON('[{"op":"add","path":"/foo","value":"bar"},{"op":"test","path":"/foo","value":"bar"}]');

A patch can be applied

<?php

$patch = \gamringer\JSONPatch\Patch::fromJSON('[{"op":"add","path":"/foo","value":"bar"},{"op":"test","path":"/foo","value":"bar"}]');

$target = [];
$patch->apply($target);

var_dump($target);

/* Results:

array(1) {
  'foo' =>
  string(3) "bar"
}

*/

If the patch fails, it gets completely reverted and an exception is thrown.

<?php

$patch = \gamringer\JSONPatch\Patch::fromJSON('[{"op":"add","path":"/foo","value":"bar"},{"op":"test","path":"/foo","value":"baz"}]');

$target = [];

try {
    $patch->apply($target);
} catch (\gamringer\JSONPatch\Exception $e) {
    var_dump($target);
}

/* Results:

array(0) {}

*/