打扰一下,如果已经涵盖了这一点,但我看了,找不到有效的答案。
我有以下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;
}
我知道这是错的,但我不确定我是否走在正确的轨道上。
提前致谢。
答案 0 :(得分:2)
匿名对象被反序列化为数组成员,foreach
可以处理:
$objs = json_decode($source)
foreach($objs as $obj)
{
$body = $obj->body; //this is another object!
$header = $obj->header; //yet another object!
}
在该循环中,您现在可以通过msg_type
和train_id
event_type
,$body
和$header
答案 1 :(得分:1)
我建议将true
作为参数传递,使用关联数组比使用对象更容易:
$messages = json_decode($source, true);
foreach($messages as $message){
$trainID = $message["body"]["train_id"];
}
答案 2 :(得分:0)
您以错误的顺序处理它:您的字符串是对象的数组。不是数组的对象。
首先需要使用大型foreach循环迭代数组,然后访问每个元素" body"和" train_id"。
您的代码应如下:
foreach($data as $item) {
echo $item->body->train_id; //or do something else with $item->body->train_id
}
答案 3 :(得分:0)
可能是这样的:
$data = json_decode($source);
foreach ($data as $message) {
$trainId = $message->body->train_id;
// Not sure what you want to do wit this ^
}
您需要循环遍历每个条目。了解数据的重复位置,以及循环所需的内容。
答案 4 :(得分:0)
您尝试像对象一样访问数组。数组表示法将$data[0]['body']
来检索" body"的值。键入数组中的第一个条目。