web-dev-qa-db-fra.com

Analyse du 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 mainJSON. J'essaie d'accéder aux éléments "name" et "age" 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 2: 

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

S'il vous plaît, guidez-moi sur l'endroit où je fais l'erreur et comment remédier à cela.

45

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

Le constructeur de tableau JSON avec un paramètre d'objet s'attend à ce qu'il soit une collection ou un tableau (pas JSONArray)

Essaye ça:

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

Votre code est correct, remplacez simplement la ligne suivante:

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

avec cette ligne:

JSONArray jsonMainArr = mainJSON.getJSONArray("source");
9
Imran Muhammad
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 arr ressemblerait à ceci: [ { "id": 1001, "nom": "jhon" }, { "id": 1002, "nom": "jhon" }]Vous pouvez utiliser:

arr.getJSONObject(index)

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

0
Kun

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());
0
Vinay Vemula