2016-05-06 18 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" 
     ] 
     }, 

我想要得到的探頭值和樣本值轉換成變量

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

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

} 

在此先感謝

+0

'$'產品的'$ range' [...]呢? – Darren

+0

謝謝,對不起,我改變了一個,而不是其他人。它仍然不會打印值。我編輯主要糾正錯誤 –

+0

可能重複[我如何從JSON提取數據與PHP?](http://stackoverflow.com/questions/29308898/how-do-i-extract-data-from-json -with-php) –

回答

1

我假設你有一個範圍的客戶(因此循環)。所以你需要循環每個客戶端,因爲它是objectarray

如果你想象它,看起來像這樣:

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的需求:

我想要得到的探頭值和樣本值轉換成 變量

簡單僅舉您的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

您只需要獲取兩個值。所以我做了。 –

0

試試這個。

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

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

}