2017-05-29 24 views
0

愚かな問題がありますが、何が間違っているのかわかりません...
私はAWS API Gateway URLをリクエストしています。私はjson形式の応答を持っています。特定のJSON要素の値を取得する場合は、要素の値ではなく「未定義」になります。ここでJavascriptのJSON解析問題

は私のコードです:

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.parseを使用応答を返す方法を変更するか、JSONを2回解析する必要があります。

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)が代わりに' '[オブジェクトのオブジェクト]'説明のために –

+0

[OK]を、それが機能するようになりました、おかげでたくさんのJSON文字列を出力しているという事実によって証明されています! –