繁体   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