seld/jsonlint

JSON Linter

维护者

详细信息

github.com/Seldaek/jsonlint

来源

问题

资助包维护!
Seldaek
Tidelift

安装量: 162,551,545

依赖者: 215

建议者: 5

安全: 0

星星: 1,319

关注者: 25

分支: 57

开放问题: 3

1.11.0 2024-07-11 14:55 UTC

README

Build Status

使用方法

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 键,它们将变成 foofoo.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 库的移植。