2017-02-14 273 views
0

我有像下面的例子格式化的JSON,這是正確的方式來循環整個文件來捕捉「IWANTTHIS」值?所有數組在JSON中都處於同一級別(「some:products」)。在今天下午對我來說太複雜JSON ...如何解析這個多維JSON與PHP來獲取正確的數組?

{ 
    "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; 
+0

嘗試'$信道= $ JFO - > _嵌入 - > { 'somkindof:塊'}'(您可能會發現使用它作爲一個陣列更容易,在看json_decode參數2 PHP文檔) – viion

回答

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

THX此工具:http://jsonselector.com

$channel = ['_embedded']['somkindof:blocks'][0]['_embedded']['some:products'][0]['system']['IWANTTHIS'] 
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); 
0

所有評論通過提供truejson_decode()功能建議的陣列選項。

但是,如果您希望維護stdClass請使用大括號。

例如:

$jfo = json_decode($json); 

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