Json probleme android

Signaler
Messages postés
24
Date d'inscription
mardi 24 mars 2020
Statut
Membre
Dernière intervention
7 avril 2021
-
Messages postés
24
Date d'inscription
mardi 24 mars 2020
Statut
Membre
Dernière intervention
7 avril 2021
-
Bonjour,


j'ai ici un json d'une api que voici:

{
  "location": {
    "name": "Paris",
    "region": "Ile-de-France",
    "country": "France",
    "lat": 48.87,
    "lon": 2.33,
    "tz_id": "Europe/Paris",
    "localtime_epoch": 1617720813,
    "localtime": "2021-04-06 16:53"
  },
  "current": {
    "last_updated_epoch": 1617720300,
    "last_updated": "2021-04-06 16:45",
    "temp_c": 6.0,
    "temp_f": 42.8,
    "is_day": 1,
    "condition": {
      "text": "Light sleet",
      "icon": "//cdn.weatherapi.com/weather/64x64/day/317.png",
      "code": 1204
    },
    "wind_mph": 17.4,
    "wind_kph": 28.1,
    "wind_degree": 290,
    "wind_dir": "WNW",
    "pressure_mb": 1017.0,
    "pressure_in": 30.5,
    "precip_mm": 1.0,
    "precip_in": 0.04,
    "humidity": 49,
    "cloud": 50,
    "feelslike_c": 2.7,
    "feelslike_f": 36.9,
    "vis_km": 10.0,
    "vis_miles": 6.0,
    "uv": 2.0,
    "gust_mph": 13.9,
    "gust_kph": 22.3,
    "air_quality": {
      "co": 220.3000030517578,
      "no2": 2.200000047683716,
      "o3": 88.69999694824219,
      "so2": 1.100000023841858,
      "pm2_5": 1.2999999523162842,
      "pm10": 1.600000023841858,
      "us-epa-index": 1,
      "gb-defra-index": 1
    }
  }
}


le problème c'est que je m'embrouille a recuperer les array et objet mon but est de recuprer la temperature en degres la ville est les condition(object text) voila mon code et mes erreures:

 @Override
        protected void onPostExecute(JSONObject jsonObject) {
            super.onPostExecute(jsonObject);
            try {
               
                JSONArray current = jsonObject.getJSONArray("current");
                JSONArray location = jsonObject.getJSONArray("location");
                JSONArray condition = current.getJSONArray(0);
                String string_condition = condition.getString(0);
                String string_temperature = current.getString(2);
                String string_ville = location.getString(0);
                textToSpeech.speak("Actuellement à" + string_ville + "il fait " + string_temperature + "°" + "avec" + string_condition, TextToSpeech.QUEUE_ADD, null);
                addMessageLayout("Actuellement à" + string_ville + "il fait " + string_temperature + "°" + "avec" + string_condition, 0, null);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }


est voici le logcat:

2021-04-06 20:43:06.400 5355-5355/com.example.learningbot W/System.err: org.json.JSONException: Value {"last_updated_epoch":1617733800,"last_updated":"2021-04-06 20:30","temp_c":5,"temp_f":41,"is_day":0,"condition":{"text":"Light snow","icon":"\/\/cdn.weatherapi.com\/weather\/64x64\/night\/326.png","code":1213},"wind_mph":13.6,"wind_kph":22,"wind_degree":330,"wind_dir":"NNW","pressure_mb":1017,"pressure_in":30.5,"precip_mm":0.3,"precip_in":0.01,"humidity":38,"cloud":62,"feelslike_c":0.9,"feelslike_f":33.6,"vis_km":10,"vis_miles":6,"uv":2,"gust_mph":16.6,"gust_kph":26.6} at current of type org.json.JSONObject cannot be converted to JSONArray
2021-04-06 20:43:06.401 5355-5355/com.example.learningbot W/System.err:     at org.json.JSON.typeMismatch(JSON.java:100)
2021-04-06 20:43:06.401 5355-5355/
com.example.learningbot W/System.err: at org.json.JSONObject.getJSONArray(JSONObject.java:591)


merci de bien vouloir m'aider à m'y retrouver

1 réponse

Messages postés
15021
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 avril 2021
3 293
Salut,

Le message d'erreur est explicite : tu essaies de "lire" un objet JSON sous forme de tableau.
Un tableau en JSON est un objet délimité par des crochets [...] qui contient une liste d'objets délimités par des accolades {}.

Ici,
location, current, air_quality
sont des objects, tu n'as pas de tableau. Donc, il faut utiliser la méthode
getJSONObject()
.

@+ 
Buno, Modérateur 
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai... 
The urgent is done, the impossible is underway. For miracles, provide for a delay...
Messages postés
24
Date d'inscription
mardi 24 mars 2020
Statut
Membre
Dernière intervention
7 avril 2021
4
Je vais essayer ça ,merci ça fesait longtemp que je n'avais pas traité du json je tacherai de m'en souvenir