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.
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");
Votre code est correct, remplacez simplement la ligne suivante:
JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
avec cette ligne:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
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.
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());