【发布时间】:2017-04-20 17:57:28
【问题描述】:
我在访问 JSON 字符串中的数据时遇到问题。我做错了什么?
工作:
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
例外:
org.json.JSONException: JSONObject["main"] is not a JSONArray. at org.json.JSONObject.getJSONArray(JSONObject.java:622) at main.SmartHomeBot.onUpdateReceived(SmartHomeBot.java:47) at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:274)
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
}
【问题讨论】:
-
{..}代表对象,[..]代表数组。如您所见,"main": {...}包含一个对象而不是数组,这就是getJSONArray("main")导致问题的原因。 -
投票结束为错字。这里没有更多的解释。
-
JSONObject obj = new JSONObject(JSON-STRING); JSONObject arr = obj.getJSONObject("main"); System.out.println(arr.get("temp"));为我修好了。谢谢!