[英]Parse JSON Data with PHP
我已經多次解析JSON數據,但是由於某種原因,無法找到嵌套數據時使用的正確語法。 我正在嘗試從此JSON解析“資產”,但是無論我嘗試什么,都繼續獲取為foreach()提供的無效參數。
"3435":{
"name":"COLO-1014-SJ1",
"nickname":"US-SJC-004",
"type":"Colocated Server",
"location":"San Jose:55 S Market",
"assets":{
"CPU":[
{
"model":"Intel E3 1270"
}
],
"Hard Drives":[
{
"model":"Western Digital 500GB RE4 ABYX SATA"
},
{
"model":"Western Digital 500GB RE4 ABYX SATA"
},
{
"model":"Kingston 240GB SSD"
}
],
"RAM":[
{
"model":"Super Talent 4GB DDR3 1333 ECC"
},
{
"model":"Super Talent 4GB DDR3 1333 ECC"
},
{
"model":"Super Talent 4GB DDR3 1333 ECC"
},
{
"model":"Super Talent 4GB DDR3 1333 ECC"
}
],
我希望這是...
$json = json_decode($jsondata, true);
foreach ($json as $item)
{
foreach ($item['assets']->RAM as $asset)
{
echo $asset->model;
}
好像您忘記了在JSON數據周圍添加周圍的花括號。 如果您的JSON數據無效,則json_decode()函數將無法正常工作。
我已經在下面修復了您的JSON代碼,現在它可以驗證並符合JSON標准。
{
"3435": {
"name": "COLO-1014-SJ1",
"nickname": "US-SJC-004",
"type": "Colocated Server",
"location": "San Jose:55 S Market",
"assets": {
"CPU": [
{
"model": "Intel E3 1270"
}
],
"Hard Drives": [
{
"model": "Western Digital 500GB RE4 ABYX SATA"
},
{
"model": "Western Digital 500GB RE4 ABYX SATA"
},
{
"model": "Kingston 240GB SSD"
}
],
"RAM": [
{
"model": "Super Talent 4GB DDR3 1333 ECC"
},
{
"model": "Super Talent 4GB DDR3 1333 ECC"
},
{
"model": "Super Talent 4GB DDR3 1333 ECC"
},
{
"model": "Super Talent 4GB DDR3 1333 ECC"
}
]
}
}
}
如果您需要檢查JSON代碼,可以使用驗證器,例如http://jsonlint.com/
其次,您的PHP代碼也是錯誤的:
$json = json_decode($jsondata, true);
foreach ($json as $item)
{
foreach ($item->assets->RAM as $asset)
{
echo $asset->model;
}
}
您試圖將返回的對象作為數組訪問,這也會導致foreach循環出現問題。
$item->assets
,而不是$item['assets']
。 進行print_r($json)
以便您可以看到JSON各個部分的類型-這將使它們更容易弄清楚如何訪問它們。
來自php官方文檔: http : //php.net/manual/fr/function.json-decode.php
第二個func arg用於assoc數組返回。 如果您喜歡在對象上操縱assoc數組,則可以使用它。
但是實際上您在循環中混合了數組和對象。
如果將arg保持為TRUE
,請使用$item['assets']['RAM']
它被解析為一個對象,因此:
foreach ($item -> assets -> RAM as $asset){ ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.