[英]Decoding Nested JSON in PHP
對不起,如果已解決此問題,但我已查看並找不到有效的答案。
我有以下JSON(為簡化起見,以下簡稱):
[{
"header": {
"msg_type": "0001"
},
"body": {
"event_type": "ARRIVAL",
"train_id": "384T22MJ20"
}
},{
"header": {
"msg_type": "0003"
},
"body": {
"event_type": "DEPARTURE",
"train_id": "382W22MJ19"
}
}]
現在我知道我可以使用json_decode創建一個php數組,但是對php不太了解,我不知道如何讓它做我想要的事情。 我需要能夠從每個數組訪問一個值。 例如,我需要從每個數組中提取train_id。 目前,我有這個:
$file = "sampleData.json";
$source = file_get_contents($file);
$data = json_decode($source);
$msgbdy = $data->body;
foreach($msgbdy as $body){
$trainID = $body->train_id;
}
我知道這是錯誤的,但是我不確定自己是否走對了。
提前致謝。
匿名對象反序列化為數組成員, foreach
可以處理:
$objs = json_decode($source)
foreach($objs as $obj)
{
$body = $obj->body; //this is another object!
$header = $obj->header; //yet another object!
}
在該循環中,您現在可以通過$body
和$header
訪問msg_type
, train_id
和event_type
我建議將它作為參數傳遞為true
,與對象相比,使用關聯數組更容易:
$messages = json_decode($source, true);
foreach($messages as $message){
$trainID = $message["body"]["train_id"];
}
您以錯誤的順序處理它:您的字符串是一個對象數組 。 不是帶有數組的對象。
您首先需要較大的foreach循環來遍歷數組,然后為每個元素訪問“ body”和“ train_id”。
因此,您的代碼應為:
foreach($data as $item) {
echo $item->body->train_id; //or do something else with $item->body->train_id
}
也許像這樣:
$data = json_decode($source);
foreach ($data as $message) {
$trainId = $message->body->train_id;
// Not sure what you want to do wit this ^
}
您需要遍歷每個完整的條目。 了解如何在哪里重復數據,這就是您需要循環的內容。
您試圖訪問類似對象的數組。 數組符號為$data[0]['body']
用於檢索數組第一個條目中“ body”鍵的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.