2016-08-23 78 views
0

我有一個JSON訪問兒童在JSON對象

{ 
    "destination_addresses" : [ "14 Mission St, San Francisco, CA 94105, USA" ], 
    "origin_addresses" : [ "23 Mission St, San Francisco, CA 94103, USA" ], 
    "rows" : [ 
     { 
     "elements" : [ 
      { 
       "distance" : { 
        "text" : "1.3 mi", 
        "value" : 2060 
       }, 
       "duration" : { 
        "text" : "7 mins", 
        "value" : 444 
       }, 
       "duration_in_traffic" : { 
        "text" : "6 mins", 
        "value" : 344 
       }, 
       "status" : "OK" 
      } 
     ] 
     } 
    ], 
    "status" : "OK" 
} 

我一直在試圖訪問duration_in_traffic的「文本」的價值和該值存儲到一個變量。出於某種原因,我得到的價值是未定義的。

var hold = JSON.parse(body.rows.elements.duration.text); 

爲什麼我不能像這樣訪問孩子?

回答

1

你有嵌套的數組,所以你需要通過索引訪問數組中的元素。

var hold = body.rows[0].elements[0].duration_in_traffic.text; 
+0

感謝您的迴應,但我試圖通過索引訪問和返回的錯誤是'TypeError:無法讀取屬性'0'未定義' – Katserbot

+0

看起來像我解決了這個問題。除非我的JSON解析並將其放入變量,否則對象本體本身不能正確讀取。 'var holder = JSON.parse(body);'then'var hold = holder.rows [0] .elements [0] .duration_in_traffic.text;' – Katserbot

+0

@Katserbot「一些奇怪的原因」?這就是'JSON.parse'的要點,可以將JSON字符串轉換爲對象,以便您可以在Javascript中使用它。 – Barmar

0

您需要首先解析JSON字符串(如果它是一個字符串),那麼你就可以訪問它?假設body是保存的變種,你會做

var hold = JSON.parse(body).rows[0].elements[0].duration.text; 

var obj = JSON.parse(body); 
var hold = obj.rows[0].elements[0].duration.text; 
0

JSON.parse不分析JSON字符串的一部分。如果你的JSON字符串是儲存在體內,例如,你需要先分析它:

var jsonObj = JSON.parse(body); 

這會給你一個JavaScript對象的工作,那麼你就可以訪問該對象的屬性,您曾經試圖做。

var hold = body.rows[0].elements[0].distance.text; //similar to @js91 

希望有幫助!