adhocore / json-fixer
Fix/repair truncated JSON data
Fund package maintenance!
adhocore
paypal.me/ji10
Installs: 233 649
Dependents: 2
Suggesters: 0
Security: 0
Stars: 49
Watchers: 5
Forks: 7
Open Issues: 1
Requires
- php: >=5.4.0
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^4.8 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0
README
PHP library to fix Truncated JSON data by padding contextual counterpart to the end. Works with PHP5.4 or above.
- Zero dependency (no vendor bloat).
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.
Installation
composer require adhocore/json-fixer
Usage
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('...'); // ...
Error
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
Missing Value
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"}
Todo
- Configurable missing value as per context (options)