2017-02-14 8 views
0

"IWANTTHIS"の値をキャッチするためにファイル全体をループする正しい方法は、以下のように書式設定されたJSONを持っていますか?すべての配列は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 '試してみてください - > - > _組み込み:でjson_decodeパラメータ2を見て、あなたは配列より簡単としてそれを使用して見つけることができ({ 'somkindofブロック'}' 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

配列にそれをデコードし、オブジェクトないことjson_decode第2のパラメータとしてtrueを加えます。

<?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'}; 
} 
関連する問題