2017-05-29 147 views
0

我有一個(可能)愚蠢的問題,但我不能錯過什麼是...
我請求一個AWS API網關URL,我有一個json格式的響應,我解析它,但是當我想要獲取特定JSON元素的值時,我會得到「undefined」而不是元素的值。JSON解析問題與Javascript

這裏是我的代碼:

var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == XMLHttpRequest.DONE) { 
      jsonData = JSON.parse(xhr.responseText); 
      data = jsonData.coord; 
      document.write(data); 
     } 
    } 
    xhr.open('GET', "https://[mon-url]", true); 
    xhr.send(); 

的API響應使用

jsonData = JSON.parse(xhr.responseText) 
document.write(jsonData) 

給下面的輸出解析:

{ 
    "coord": { 
    "lon": 2.35, 
    "lat": 48.85 
    }, 
    "weather": [ 
    { 
     "id": 800, 
     "main": "Clear", 
     "description": "clear sky", 
     "icon": "01n" 
    } 
    ], 
    "base": "stations", 
    "main": { 
    "temp": 291.97, 
    "pressure": 1019, 
    "humidity": 56, 
    "temp_min": 288.15, 
    "temp_max": 295.15 
    }, 
    "visibility": 10000, 
    "wind": { 
    "speed": 3.1, 
    "deg": 60 
    }, 
    "clouds": { 
    "all": 0 
    }, 
    "dt": 1495747800, 
    "sys": { 
    "type": 1, 
    "id": 5615, 
    "message": 0.0022, 
    "country": "FR", 
    "sunrise": 1495684591, 
    "sunset": 1495741168 
    }, 
    "id": 2988507, 
    "name": "Paris", 
    "cod": 200 
} 

但是,如果我試圖得到一個特定的元素值,例如使用document.write(jsonData.coord)我得到"undefined"作爲值。

有人能幫我理解爲什麼我無法正確解析我的JSON數據嗎?

謝謝!

+0

你還可以記錄'jsonData'的類型嗎? 'console.log(typeof(jsonData))' – Rajesh

+0

@prasad,如果數據OP添加的格式正確,不應該有任何區別 –

+0

使用'jsonData = JSON.parse(JSON.stringify(xhr.responseText))' – farhadamjady

回答

1

你是從服務器獲取的數據是JSON數據的字符串。您應該更改返回的響應方式,或者您必須解析JSON兩次。

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == XMLHttpRequest.DONE) { 
     jsonData = JSON.parse(xhr.responseText); 
     jsonData = JSON.parse(jsonData); 
     data = jsonData.coord; 
     document.write(data); 
    } 
} 
xhr.open('GET', "https://[mon-url]", true); 
xhr.send(); 
+1

這是一個正確的結論,事實證明'document.write(jsonData)'打印了一個JSON字符串而不是'[object Object]' –

+0

好吧,它現在可以工作了,非常感謝解釋! –

0

使用JSON.parse如果響應是一個字符串