PHP library to fix Truncated JSON data by padding contextual counterpart to the end. Works with PHP5.4 or above.
It is a work in progress and might not cover all edge cases. It would be great if you try it out, open some issues or contribute.
composer require adhocore/json-fixer
use Ahc\Json\Fixer;
$json = (new Fixer)->fix('{"a":1,"b":2');
// {"a":1,"b":2}
$json = (new Fixer)->fix('{"a":1,"b":true,');
// {"a":1,"b":true}
$json = (new Fixer)->fix('{"b":[1,[{"b":1,"c"');
// {"b":[1,[{"b":1,"c":null}]]}
// For batch fixing, you can just reuse same fixer instance:
$fixer = new Fixer;
$fixer->fix('...');
$fixer->fix('...');
// ...
If there's error and fixer cant fix the JSON for some reason, it will throw a RuntimeException
.
You can disable this behavior by passing silent flag (2nd param) to fix()
in which case original input is returned:
(new Fixer)->silent()->fix('invalid');
// 'invalid'
(new Fixer)->silent(true)->fix('invalid');
// 'invalid'
(new Fixer)->silent(false)->fix('invalid');
// RuntimeException
By default missing values are padded with null
. You can change it passing desired value to missingValue()
:
// key b is missing value and is padded with `null`
$json = (new Fixer)->fix('{"a":1,"b":');
// {"a":1,"b":null}
// key b is missing value and is padded with `true`
$json = (new Fixer)->missingValue(true)->fix('{"a":1,"b":');
// {"a":1,"b":true}
// key b is missing value and is padded with `"truncated"`
// Note that you can actually inject a whole new JSON subset as 3rd param
// but that should be a valid JSON segment and is not checked by fixer.
$json = (new Fixer)->missingValue('"truncated"')->fix('{"a":1,"b":');
// {"a":1,"b":"truncated"}