2017-04-20 20 views
1

JSON文字列のデータにアクセスする際に問題があります。私は間違って何をしていますか?JSON文字列のJavaアクセスデータ

ワーキング:

JSONObject obj = new JSONObject("JSON-STRING"); 
JSONArray arr = obj.getJSONArray("weather"); 
System.out.println(arr.getJSONObject(0).get("description"); >> clear sky 

に動作していない:

JSONObject obj = new JSONObject("JSON-STRING"); 
JSONArray arr = obj.getJSONArray("main"); 
System.out.println(arr.getJSONObject(0).get("temp"); >> 285.15 

例外:

​​

JSON-文字列:

{ 
    "coord": { 
     "lon": 6.55, 
     "lat": 51.27 
    }, 
    "weather": [{ 
      "id": 800, 
      "main": "Clear", 
      "description": "clear sky", 
      "icon": "01d" 
     } 
    ], 
    "base": "stations", 
    "main": { 
     "temp": 285.15, 
     "pressure": 1034, 
     "humidity": 30, 
     "temp_min": 285.15, 
     "temp_max": 285.15 
    }, 
    "visibility": 10000, 
    "wind": { 
     "speed": 2.6 
    }, 
    "clouds": { 
     "all": 0 
    }, 
    "dt": 1492705200, 
    "sys": { 
     "type": 1, 
     "id": 4909, 
     "message": 0.2825, 
     "country": "DE", 
     "sunrise": 1492662386, 
     "sunset": 1492713582 
    }, 
    "id": 2808559, 
    "name": "Willich", 
    "cod": 200 
} 
+3

ようにすればよいJsonObjectからデータをフェッチする

'{..}' '、オブジェクトを表すには、[..]'配列を表します。 '' main ":{...}'が配列以外のオブジェクトを保持しているので、 'getJSONArray(" main ")'が問題の原因です。 – Pshemo

+0

タイプミスとして閉じる投票。これ以上説明するものはありません。 – Pshemo

+0

JSONObject obj =新しいJSONObject(JSON-STRING); \t \t JSONObject arr = obj.getJSONObject( "main"); \t \t \t \t System.out.println(arr.get( "temp"));私のためにそれを固定した。ありがとう! – piguy

答えて

1

weatherが複数のweatherの配列であり、mainが単一のオブジェクトであるため、エラーが発生します。両者の

違いを以下に示す:

"weather": [{ 
     "id": 800, 
     "main": "Clear", 
     "description": "clear sky", 
     "icon": "01d" 
    } 
], 

"main": { 
    "temp": 285.15, 
    "pressure": 1034, 
    "humidity": 30, 
    "temp_min": 285.15, 
    "temp_max": 285.15 
}, 

をだからJSON "weather" : [{....}, {....}, {....}][]weatherが配列であることを示しています。

0

キーの親json値では、 "weather"キーはJSONArrayを表しますが、キー "main"の値はJSONArrayではなくJSONObjectを表します。もし

JSONObject mainObj = obj.getJSONObject("main"); 
System.out.println(mainObj.get("temp")); 

以下
0
String jsonobj = "{\n \"coord\": {\n  \"lon\": 6.55,\n  \"lat\": 51.27\n },\n \"weather\": [{\n   \"id\": 800,\n   \"main\": \"Clear\",\n   \"description\": \"clear sky\",\n   \"icon\": \"01d\"\n  }\n ],\n \"base\": \"stations\",\n \"main\": {\n  \"temp\": 285.15,\n  \"pressure\": 1034,\n  \"humidity\": 30,\n  \"temp_min\": 285.15,\n  \"temp_max\": 285.15\n },\n \"visibility\": 10000,\n \"wind\": {\n  \"speed\": 2.6\n },\n \"clouds\": {\n  \"all\": 0\n },\n \"dt\": 1492705200,\n \"sys\": {\n  \"type\": 1,\n  \"id\": 4909,\n  \"message\": 0.2825,\n  \"country\": \"DE\",\n  \"sunrise\": 1492662386,\n  \"sunset\": 1492713582\n },\n \"id\": 2808559,\n \"name\": \"Willich\",\n \"cod\": 200\n}"; 
JSONObject obj = new JSONObject(jsonobj); 
JSONObject jsonObject = obj.getJSONObject("main"); 
System.out.println(jsonObject.get("temp")); 
+0

約900文字の長さの行。もっと良い方法はありませんか? –