我正在尝试解码JSON
我正在通过STOMP阅读JSON。有不同的JSON数据集,所以我需要弄清楚哪个JSON数据集已经通过。我通过阅读它的标题来做到这一点。
但是有一个特定的数据集我无法阅读
foreach (json_decode($msg->body,true) as $event) {
if(isset($event['schemaLocation'])) {
$schedule_id=($event['schedule']['schedule_start_date']);
$signalling_id=($event['schedule']['schedule_segment']['signalling_id']);
echo $schedule_id;
}
在上面的示例中,isset函数工作正常,$ schedule_id也获得了正确的答案
但$ signalling_id会出现未定义索引
的错误这是JSON的一部分转储(相当长的............)。带有signalling_id的JSON片段朝向JSON的末尾。任何有助于变量signalling_id的帮助都非常受欢迎。
array(7) {
["schemaLocation"]=>
string(72) "http://xml.networkrail.co.uk/ns/2008/Train itm_vstp_cif_messaging_v1.xsd"
["classification"]=>
string(8) "industry"
["timestamp"]=>
string(13) "1410374918000"
["owner"]=>
string(12) "Network Rail"
["originMsgId"]=>
string(47) "2014-09-10T18:48:38-00:00vstp.networkrail.co.uk"
["Sender"]=>
array(3) {
["organisation"]=>
string(12) "Network Rail"
["application"]=>
string(4) "TOPS"
["component"]=>
string(4) "VSTP"
}
["schedule"]=>
array(11) {
["schedule_id"]=>
string(0) ""
["transaction_type"]=>
string(6) "Create"
["schedule_start_date"]=>
string(10) "2014-09-10"
["schedule_end_date"]=>
string(10) "2014-09-10"
["schedule_days_runs"]=>
string(7) "0010000"
["applicable_timetable"]=>
string(1) "N"
["CIF_bank_holiday_running"]=>
string(1) " "
["CIF_train_uid"]=>
string(6) "W64017"
["train_status"]=>
string(1) "1"
["CIF_stp_indicator"]=>
string(1) "O"
["schedule_segment"]=>
array(1) {
[0]=>
array(20) {
["signalling_id"]=>
string(4) "5Y75"
["uic_code"]=>
string(0) ""
["atoc_code"]=>
string(0) ""
["CIF_train_category"]=>
string(2) "EE"
["CIF_headcode"]=>
string(0) ""
["CIF_course_indicator"]=
............................................
答案 0 :(得分:1)
schedule_segment本身就是一个数组,所以不是
['schedule']['schedule_segment']['signalling_id']);
应该是
['schedule']['schedule_segment'][0]['signalling_id']);
答案 1 :(得分:1)
正如您在var转储中看到的,signalling_id位于另一个数组中。使用:
$signalling_id=($event ['schedule']['schedule_segment'][0]['signalling_id']);
如果一个具有键0的元素数组在整个过程中不是常数,则可能需要一些逻辑来确定每次迭代中的内容。