seld / jsonlint
JSON Linter
1.11.0
2024-07-11 14:55 UTC
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
使用方法
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);
您还可以传递其他标志到 JsonParser::lint/parse
来调整功能。
JsonParser::DETECT_KEY_CONFLICTS
在发现重复键时抛出异常。JsonParser::ALLOW_DUPLICATE_KEYS
收集重复键。例如,如果您有两个foo
键,它们将变成foo
和foo.2
。JsonParser::PARSE_TO_ASSOC
将解析为关联数组而不是 stdClass 对象。JsonParser::ALLOW_COMMENTS
在解析时允许(并忽略)JSON文档中的行内//
和多行/* */
注释。JsonParser::ALLOW_DUPLICATE_KEYS_TO_ARRAY
收集重复键。例如,如果您有两个foo
键,则foo
键将变成一个对象(或关联模式下的数组),其中所有foo
值都可以通过$result->foo->__duplicates__
(或关联模式下的$result['foo']['__duplicates__']
)作为数组访问。
示例
$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']; }
注意:此库旨在在失败时提供良好的错误信息来解析 JSON,但无法像 php 内置的
json_decode()
那样快速。建议使用
json_decode
进行解析,当它失败时,再次使用 seld/jsonlint 获取正确的错误信息。例如,请参阅 Composer 如何使用此库:[Composer 示例](https://github.com/composer/composer/blob/56edd53046fd697d32b2fd2fbaf45af5d7951671/src/Composer/Json/JsonFile.php#L283-L318)
安装
要使用 Composer 快速安装,请使用
composer require seld/jsonlint
如果您的应用程序具有 PSR-4 自动加载器,则可以轻松地在其中使用 JSON Lint,或者可以通过 Composer 安装作为 CLI 工具。通过 Composer 安装后,您可以运行以下命令来检查 json 文件或 URL
$ bin/jsonlint file.json
需求
- PHP 5.3+
- [可选] PHPUnit 3.5+ 以执行测试套件(phpunit --version)
提交错误和功能请求
错误和功能请求在 GitHub 上跟踪
作者
Jordi Boggiano - [email protected] - http://twitter.com/seldaek
许可
JSON Lint 在 MIT 许可证下授权 - 请参阅 LICENSE 文件以获取详细信息
致谢
此库是 JavaScript jsonlint 库的移植。