seld / jsonlint
JSON Linter
Installs: 171 464 744
Dependents: 215
Suggesters: 5
Security: 0
Stars: 1 326
Watchers: 25
Forks: 57
Open Issues: 3
Requires
- php: ^5.3 || ^7.0 || ^8.0
Requires (Dev)
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^4.8.35 || ^5.7 || ^6.0 || ^8.5.13
README
Usage
use Seld\JsonLint\JsonParser; $parser = new JsonParser(); // returns null if it's valid json, or a ParsingException object. $parser->lint($json); // Call getMessage() on the exception object to get // a well formatted error message error like this // Parse error on line 2: // ... "key": "value" "numbers": [1, 2, 3] // ----------------------^ // Expected one of: 'EOF', '}', ':', ',', ']' // Call getDetails() on the exception to get more info. // returns parsed json, like json_decode() does, but slower, throws // exceptions on failure. $parser->parse($json);
You can also pass additional flags to JsonParser::lint/parse
that tweak the functionality:
JsonParser::DETECT_KEY_CONFLICTS
throws an exception on duplicate keys.JsonParser::ALLOW_DUPLICATE_KEYS
collects duplicate keys. e.g. if you have twofoo
keys they will end up asfoo
andfoo.2
.JsonParser::PARSE_TO_ASSOC
parses to associative arrays instead of stdClass objects.JsonParser::ALLOW_COMMENTS
parses while allowing (and ignoring) inline//
and multiline/* */
comments in the JSON document.JsonParser::ALLOW_DUPLICATE_KEYS_TO_ARRAY
collects duplicate keys. e.g. if you have twofoo
keys thefoo
key will become an object (or array in assoc mode) with allfoo
values accessible as an array in$result->foo->__duplicates__
(or$result['foo']['__duplicates__']
in assoc mode).
Example:
$parser = new JsonParser; try { $parser->parse(file_get_contents($jsonFile), JsonParser::DETECT_KEY_CONFLICTS); } catch (DuplicateKeyException $e) { $details = $e->getDetails(); echo 'Key '.$details['key'].' is a duplicate in '.$jsonFile.' at line '.$details['line']; }
Note: This library is meant to parse JSON while providing good error messages on failure. There is no way it can be as fast as php native
json_decode()
.It is recommended to parse with
json_decode
, and when it fails parse again with seld/jsonlint to get a proper error message back to the user. See for example how Composer uses this library:
Installation
For a quick install with Composer use:
composer require seld/jsonlint
JSON Lint can easily be used within another app if you have a PSR-4 autoloader, or it can be installed through Composer for use as a CLI util. Once installed via Composer you can run the following command to lint a json file or URL:
$ bin/jsonlint file.json
Requirements
- PHP 5.3+
- [optional] PHPUnit 3.5+ to execute the test suite (phpunit --version)
Submitting bugs and feature requests
Bugs and feature request are tracked on GitHub
Author
Jordi Boggiano - j.boggiano@seld.be - http://twitter.com/seldaek
License
JSON Lint is licensed under the MIT License - see the LICENSE file for details
Acknowledgements
This library is a port of the JavaScript jsonlint library.