J'ai des problèmes pour accéder aux données dans une chaîne JSON. Qu'est-ce que je fais mal?
Travail:
JSONObject obj = new JSONObject("JSON-STRING");
JSONArray arr = obj.getJSONArray("weather");
System.out.println(arr.getJSONObject(0).get("description"); >> clear sky
Ca ne fonctionne pas:
JSONObject obj = new JSONObject("JSON-STRING");
JSONArray arr = obj.getJSONArray("main");
System.out.println(arr.getJSONObject(0).get("temp"); >> 285.15
Exception:
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)
La chaîne 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 réponses
Vous obtenez l'erreur car weather
est le tableau du multiple weather
et main
est l'objet unique.
La différence entre les deux est indiquée ci-dessous:
"weather": [{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
Et
"main": {
"temp": 285.15,
"pressure": 1034,
"humidity": 30,
"temp_min": 285.15,
"temp_max": 285.15
},
Donc, dans le JSON "weather" : [{....}, {....}, {....}]
[]
, montrez que weather
est le tableau.
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"));
Dans votre json parent, la valeur de la clé "weather" représente un JSONArray mais la valeur de la clé "main" représente un JSONObject et non un JSONArray.
Pour récupérer les données de JsonObject, vous devez faire comme ci-dessous
JSONObject mainObj = obj.getJSONObject("main");
System.out.println(mainObj.get("temp"));
Questions connexes
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].