3

我从外部合作伙伴处接收 JSON 字符串并使用 php 5.3.3 对其进行解析

$jsonObject = json_decode($jsonString);
json_last_error()...

虽然 json_last_error() 检测到无效的 JSON,但它不会检测到重复的键,如下所示:

{
  "first" : "First name",
  "last"  : "Last name",
  "info"  : {
     "phone" : "555-555-555",
     "phone" : "222-222-222"
     }
}

请注意,这两个电话号码使用相同的键并且不在数组中。有没有办法在 php 中检测到这样的重复键?

4

2 回答 2

3

不能有重复的密钥!

这就是的定义——它必须是唯一的

第二个将覆盖第一个,因此不会有任何真正的重复键。

于 2012-09-07T14:42:09.880 回答
2

正如@Neal 所说,除非您构建自己的 json 解析器,否则这是不可能的。或者用别人的。

例如,您可以使用seld/jsonlint

这是Composer 从今天开始使用的代码,用于警告重复需求

<?php
$jsonParser = new JsonParser;
try {
    $jsonParser->parse(file_get_contents($localConfig), JsonParser::DETECT_KEY_CONFLICTS);
} catch (\Seld\JsonLint\DuplicateKeyException $e) {
    $details = $e->getDetails();
    $io->writeError('<warning>Key '.$details['key'].' is a duplicate in '.$localConfig.' at line '.$details['line'].'</warning>');
}
于 2015-11-21T11:38:31.740 回答