【问题标题】:Retrive Data fromJSON从 JSON 中检索数据
【发布时间】:2018-05-28 18:20:32
【问题描述】:

我有一个 XML,我将其解析为 JSON 并将其放入一个数组中。所以我得到了以下信息:

{
    "result": {
        "stats": {
            "count":"0"
        }
    }
}

但我无法通过以下方式从数组中检索数据:

$yummy = json_decode($json);
echo $yummy->count; //0

感谢您的帮助

【问题讨论】:

  • 如果无法处理 JSON,为什么还要将 XML 转换为 JSON。为什么不坚持使用 XML 并学习使用 SimpleXML。
  • @luca 你应该检查你的 json 结构然后访问它 echo $yummy->result->stats->count;
  • 请注意格式更好的结构。

标签: php arrays json xml xml-parsing


【解决方案1】:

函数json_decode返回一个混合变量,你可以通过传递第二个参数true来强制它返回一个关联数组:

$yummy = json_decode($json, true);

然后您可以像在数组中一样访问您的值: echo $yummy['result']['stats']['count'];

【讨论】:

    【解决方案2】:

    该对象只有一个属性,它被称为result 而不是count

    您无法从顶层访问数据结构中的任何位置的随机属性。您必须逐个查找要访问的数据的所有祖先。

    【讨论】:

      【解决方案3】:

      将 XML 转换为 JSON 意味着您将丢失信息和功能。实际上,不需要转换。 SimpleXML 提供了类似的语法,而对于 DOM,您可以使用 Xpath 表达式。

      $xml = <<<'XML'
      <response>
        <result>
          <stats>
            <count>21</count>
          </stats>
        </result>
      </response>
      XML;
      
      // SimpleXML maps elements to properties
      $response = new SimpleXMLElement($xml);
      var_dump(
        (int)$response->result->stats->count
      );
      
      // DOM can use Xpath expressions to extract values
      $document = new DOMDocument();
      $document->loadXml($xml);
      $xpath = new DOMXpath($document);
      var_dump(
        $xpath->evaluate('number(/response/result/stats/count)')
      );
      

      输出:

      int(21)
      float(21)
      

      【讨论】:

        【解决方案4】:

        您可以使用 some online json validator 来确保您解析的 json 是正确的。

        【讨论】:

        • 问题不在于有效的 JSON,而在于如何访问内容。
        猜你喜欢
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        • 2013-09-05
        相关资源
        最近更新 更多