1
我得到JSON从每个请求的API数据,但我不知道如何解析它。这种JSON格式中的某些字段将始终存在,而其他字段则可以互换。请参阅下面的示例进行说明。适当和有效的方式来解析“嵌套” JSON对象
$json1 = '{
"update_id": 12345,
"message": {
"message_id": 12,
"from": {
"id": 12345,
"first_name": "Foo",
"last_name": "Foo",
"username": "foo"
},
"chat": {
"id": 12345,
"first_name": "Foo",
"last_name": "Foo",
"username": "foo"
},
"date": 1440592506,
"text": "dummy"
}
}';
$json2 = '{
"update_id": 12345,
"message": {
"message_id": 13,
"from": {
"id": 12345,
"first_name": "Foo",
"last_name": "Foo",
"username": "foo"
},
"chat": {
"id": 12345,
"first_name": "Foo",
"last_name": "Foo",
"username": "foo"
},
"date": 1440619228,
"sticker": {
"width": 510,
"height": 512,
"thumb": {
"file_id": "dasdsdasd",
"file_size": 6204,
"width": 127,
"height": 128
},
"file_id": "adasds",
"file_size": 39518
}
}
}';
正如你看到的消息对象中的字段,如MESSAGE_ID,从和聊天是相同的,而最后一个可能是一些为文本,贴纸,照片,音频和等(各这是分开的类,我需要给出的消息obj的字段来创建对象和初始化它的属性ECT)。除此之外,可能还有一些额外的(可选)字段。这就是为什么我不能用下面的办法解析:
$json_decoded = json_decode($json);
$updateID = $json_decoded->update_id;
$messageObject = $json_decoded->message;
$messageID = $messageObject->message_id;
$fromUserObject = $messageObject->from;
$date = $messageObject->date;
$chatObject = $messageObject->chat;
$userID = $fromUserObject->id;
$userFirstName = $fromUserObject->first_name;
$userLastName = $fromUserObject->last_name;
$userName = $fromUserObject->username;
我见过一些例子,人们使用foreach循环来分析整个数据,但我没有发现它适用于这种情况(或者我只是不能应用这种方法)。
我真的很感激,对解析这些数据的方式您的建议和指导。
的情况下,如果你想检查的属性存在,你可以使用这个恰当命名的函数http://php.net/manual/en/function.property-exists.php – rjdown
你告诉我们你的问题,但不是你实际想要达到的目标。喜欢详细说明一下? – RiggsFolly
为了解决我列出的问题,比如解析这类对象的最佳实践以及如何找到对象的长度。 @RiggsFolly抱歉,如果还不够清楚,我只是认为标题澄清了我想要达到的目标,我会再次通读这篇文章并试图阐述。欢呼声指出 – fiz