簡體   English   中英

用PHP解碼嵌套的JSON

[英]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_typetrain_idevent_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM