45 votes

Analyse d'un tableau JSON dans un objet JSON

J'ai du JSON avec la structure suivante :

{"source":[
           {"name":"john","age":20},
           {"name":"michael","age":25},
           {"name":"sara", "age":23}
         ]
}

J'ai nommé cette chaîne JSON comme mainJSON . J'essaie d'accéder aux éléments "nom" et "âge" avec le code Java suivant :

JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
for (int i = 0; i < jsonMainArr.length(); i++) {  // **line 2**
     JSONObject childJSONObject = jsonMainArr.getJSONObject(i);
     String name = childJSONObject.getString("name");
     int age     = childJSONObject.getInt("age");
}

On me montre l'exception suivante pour la ligne numéro 2 :

org.json.JSONException: JSONArray initial value should be a string or collection or array.

Veuillez m'indiquer où je fais l'erreur et comment y remédier.

50voto

Chandu Points 40028

mainJSON.getJSONArray("source") renvoie un JSONArray vous pouvez donc supprimer le new JSONArray.

Le contructeur JSONArray avec un paramètre objet s'attend à ce qu'il s'agisse d'une collection ou d'un tableau (et non de JSONArray).

Essayez ça :

JSONArray jsonMainArr = mainJSON.getJSONArray("source");

9voto

Imran Muhammad Points 21

Votre code est correct, il suffit de remplacer la ligne suivante :

JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));

avec cette ligne :

JSONArray jsonMainArr = mainJSON.getJSONArray("source");

2voto

eento Points 271

Si vous rencontrez toujours ce problème : il suffit de copier/coller ce tutoriel qui répond directement à votre question ! ! ;)

Tutoriel Android sur l'analyse des objets JSON

0voto

Vinay Vemula Points 1881

La ligne 2 devrait être

for (int i = 0; i < jsonMainArr.size(); i++) {  // **line 2**

Pour la ligne 3, je dois faire

    JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString());

0voto

Kun Points 527
private static String readAll(Reader rd) throws IOException {
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) {
      sb.append((char) cp);
    }
    return sb.toString();
  }

 String jsonText = readAll(inputofyourjsonstream);
 JSONObject json = new JSONObject(jsonText);
 JSONArray arr = json.getJSONArray("sources");

Votre arrangement ressemblerait à : [ { "id":1001, "nom" : "jhon" }, { "id":1002, "nom" : "jhon" } ] Vous pouvez utiliser :

arr.getJSONObject(index)

pour obtenir les objets à l'intérieur du tableau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X