如何用PHP解析这个多维JSON来获取正确的数组?

时间:2017-02-14 15:32:26

标签: php arrays json parsing formatting

我有JSON格式如下面的示例,这是循环整个文件以捕获“IWANTTHIS”值的正确方法?所有数组都在JSON中处于同一级别(“some:products”)。今天下午我的JSON太复杂了......

{
  "type": "page",
  "pageType": "section",
  "_links": {},
  "_embedded": {
  "somkindof:blocks": [
    {
     "somevalue": 25,
     "_embedded": {
     "some:products": [
     {
      "system": {
      "availability": {},
      "IWANTTHIS": "20284",
      "hhhh": []
      },
....

我尝试了类似这样的东西,但是我无法捕获像我的例子那样格式化的值。

$jfo = json_decode($vcurl);
$channel = $jfo->_embedded->[somkindof:blocks];

var_dump $channel;

4 个答案:

答案 0 :(得分:2)

如果将JSON解码为关联数组,事情会变得更容易。

(偶数对象将成为关联数组,您可以使用相同的语法解析整个对象树。)

然后使用方括号语法解析数组。

请注意,"somkindof:blocks""some:products"都是常规数组(有序的项目列表),因此您必须解析它们中的每一项(使用简单的foreach

说你可能很多“我想要这个”。

<?php

$jfo = json_decode($vcurl, true ); // <-- decode into associative array

foreach( $jfo[ "embedded" ][ "somkindof:blocks" ] as $level_1_item )
{
    foreach( $level_1_item[ "_embedded" ][ "some:products" ] as $level_2_item )
    {
        $iWantThis = $level_2_item[ "IWANTTHIS" ];
    }
}

答案 1 :(得分:1)

这个工具:http://jsonselector.com

$channel = ['_embedded']['somkindof:blocks'][0]['_embedded']['some:products'][0]['system']['IWANTTHIS']

答案 2 :(得分:0)

true作为第二个参数添加到json_decode,将其解码为数组,而不是对象。

<?php
$json = '{
  "type": "page",
  "pageType": "section",
  "_links": {},
  "_embedded": {
    "somkindof:blocks": [
      {
        "somevalue": 25,
        "_embedded": {
          "some:products": [
            {
              "system": {
                "availability": {},
                "IWANTTHIS": "20284",
                "hhhh": []
              }
            }
          ]
        }
      }
    ]
  }
}';

$jfo = json_decode($json, true);

$channel = $jfo['_embedded']['somkindof:blocks'];
print_r($channel);

答案 3 :(得分:0)

所有评论都通过向json_decode()提供true功能来建议数组选项。

但是,如果您希望保持stdClass使用大括号。

例如:

$jfo = json_decode($json);

foreach($jfo->_embedded->{'somkindof:blocks'} as $block) {
    echo $block->{'somSomething is wrongue'};
}