2014-09-10 20 views
0

我正在嘗試解碼JSON在PHP中解碼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片斷是在第e 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"]= 
      ............................................ 

回答

1

schedule_segment本身是一個數組,所以不是

['schedule']['schedule_segment']['signalling_id']); 

,可能應該是

['schedule']['schedule_segment'][0]['signalling_id']); 
+0

非常感謝,作品 – user2635961 2014-09-10 19:46:04

1

正如你可以在var轉儲看,signalling_id是另一個數組中。用途:

$signalling_id=($event ['schedule']['schedule_segment'][0]['signalling_id']); 

如果用0鍵是一個元件陣列始終不是恆定的,你可能需要一些邏輯來弄清楚它是什麼,在每個迭代。

+0

只是現在測試,謝謝。等待JSON通過STOMP – user2635961 2014-09-10 19:18:59

+0

非常感謝 – user2635961 2014-09-10 19:46:37