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