2016-05-06 9 views
1

私は誰かが助けてくれるのだろうかと思っていました。 APIからのJSONフィードがあり、必要な情報を得るためのレベルを決めることはできません。PHP固有のJSON配列のネストレベルの混乱

JSONは

{ 
    "sourceId": "1234", 
    "sourceType": "MONITOR", 
    "searchMeta": { 
    "startTimestamp": 1462361513, 
    "endTimestamp": 1462508560, 
    "maxResults": 10000, 
    "metricType": [ 
     "clients" 
    ], 
    "family": [ 
     "Product" 
    ], 
    "metricsInterval": "M5" 
    }, 
    "clients": { 
    "One": [ 
     { 
     "timestamp": 1462361400, 
     "avg": 2, 
     "min": 1, 
     "max": 3, 
     "probes": 6, 
     "samples": 3, 
     "sources": [ 
      "123", 
      "234", 
      "345", 
      "456", 
      "567", 
      "789" 
     ] 
     }, 

の下に、私は事前に感謝

+0

代わりに '$のrange'の' $製品[...] '? – Darren

+0

ありがとう、申し訳ありませんが、私は1つを変更し、他の人は変更しませんでした。それはまだ値を印刷しません。私はメインを編集してエラーを修正しました –

+0

[PHPでJSONからデータを取り出す方法は?](http://stackoverflow.com/questions/29308898/how-do-i-extract-data-from-json) -with-php) –

答えて

1

私はあなたが(それゆえループ)クライアントの範囲を持っていますと仮定します。だからarrayobjectの通り、各クライアントもループする必要があります。あなたはそれを視覚化した場合

は、それは次のようになります。

CLIENTS = ARRAY(
    1 => ARRAY(OBJECT{}), // you want the OBJECT{} 
    ....etc 
) 

だから下のループはあなたのためにそれを取得します。

$data = json_decode($json, TRUE); 

foreach($data['clients'] as $range => $product) { 
    foreach($product as $element){ 
     echo $element['timestamp']." Probes: ".$element['probes']." Samples: ".$element['samples']." <br>";  
    } 
} 

Example/Demo

次を返します:

1462361400 Probes: 6 Samples: 3 <br> 
+0

優れたダレン。これをありがとうございました。説明とその説明。本当の伝説!!!!! –

+0

私の喜び@RenegadeRob - 'json'を扱っている間、ちょうどあなたのためのヒント。 jsoneditoronline.comをチェックしてください - それはあなたがどのようにループし、構造とすべてを理解するのに役立ちます! ;-) – Darren

0

OPの需要変数

foreach($json['clients'] as $range => $product){ 

echo $product['timestamp']." Probes: ".$product['probes']." Samples: ".$product['samples']." <br>"; 

} 

にプローブ値とサンプル値を取得したいされたされています。

私はちょうど$jsonとしてあなたのJSONファイルに名前を付け 変数

シンプルにプローブ値とサンプル値を取得したいました。

$arr = json_decode($json); 

echo $samples = $arr->clients->One[0]->samples; //3 
echo $probes = $arr->clients->One[0]->probes; //6 
+0

さらに多くのことがあるので、私は本当にforeachでそれを必要とします。約300フィールド –

+0

あなたは2つの値だけを取得するよう求めています。だから私はした。 –

0

これを試してください。

$data = json_decode($json,true); 
foreach($data['clients'] as $client){ 

echo $client['timestamp']." Probes: ".$client['probes']." Samples: ".$client['samples']." <br>"; 

}