【问题标题】:Detect duplicate keys in JSON using php使用 php 检测 JSON 中的重复键
【发布时间】:2012-09-01 11:07:48
【问题描述】:

我从外部合作伙伴处接收 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中检测到这样的重复键?

【问题讨论】:

    标签: php json validation duplicates


    【解决方案1】:

    不能有重复的键!

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

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

    【讨论】:

    • 是的。不应该有重复的键。不幸的是,我有时会从确实有重复密钥的外部合作伙伴那里收到无效的 JSON。 json_last_error() 没有检测到它,因为正如您正确指出的那样, json_decode() 使用最后一个。那么当我从外部收到的 JSON 中存在这样的问题时,我该如何检测呢?
    • @iRadio 你不能,除非你建立自己的 json 解析器。
    • 谢谢尼尔。很抱歉听到这个消息,但感谢您的评论。
    【解决方案2】:

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

    例如,您可以使用seld/jsonlint

    这里是代码Composer uses since today to warn about duplicate requirements

    <?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>');
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 2016-06-18
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多