Itération JSON Array sous Android / Java

Je construis une application Android qui doit être téléchargée et synchronisée avec une firebase database en ligne. J’envoie ma requête depuis l’application à une page PHP qui renvoie les lignes pertinentes d’une firebase database au format JSON.

quelqu’un peut-il s’il vous plaît me dire la meilleure façon d’itérer à travers un tableau JSON?

Je reçois un tableau d’objects:

[{json object},{json object},{json object}]

Quel est le morceau de code le plus simple que je pourrais utiliser pour accéder aux objects JSONObject dans le tableau?

EDIT: maintenant que j’y pense, la méthode que j’ai utilisée pour itérer la boucle était:

 for (Ssortingng row: json){ id = row.getInt("id"); name = row.getSsortingng("name"); password = row.getSsortingng("password"); } 

Donc, je suppose que j’étais capable de transformer le Json retourné en un tableau itérable. Des idées sur la façon dont je pourrais y arriver?

Je m’excuse pour mon vagrant mais je travaillais à partir d’un exemple que j’ai trouvé sur le web et que je n’ai plus pu le trouver.

Je l’ai fait de deux manières différentes,

1.) faire une carte

  HashMap applicationSettings = new HashMap(); for(int i=0; i 

2.) créer un JSONArray de noms

  JSONArray names = json.names(); JSONArray values = json.toJSONArray(names); for(int i=0; i 

Je pense que ce code est court et clair:

 int id; Ssortingng name; JSONArray array = new JSONArray(ssortingng_of_json_array); for (int i = 0; i < array.length(); i++) { JSONObject row = array.getJSONObject(i); id = row.getInt("id"); name = row.getString("name"); } 

Est-ce ce que vous cherchiez?

Malheureusement, JSONArray ne supporte pas chaque instruction, comme:

 for(JSONObject someObj : someJsonArray) { // do something about someObj .... .... } 

Si vous utilisez l’ implémentation JSON.org Java , qui est open source, vous pouvez simplement implémenter JSONArray dans l’interface Iterable et append la méthode suivante à la classe:

 @Override public Iterator iterator() { return this.myArrayList.iterator(); } 

Cela rend toutes les instances de JSONArray itérables, ce qui signifie que la syntaxe for (Object foo : bar) fonctionnera désormais avec elle (notez que foo doit être un object, car les JSONArrays n’ont pas de type déclaré). Tout cela fonctionne parce que la classe JSONArray est soutenue par une simple ArrayList, qui est déjà itérable. J’imagine que d’autres implémentations open source seraient tout aussi faciles à modifier.

Sur les tableaux, recherchez:

 JSONArray menuitemArray = popupObject.getJSONArray("menuitem"); 

Vous utilisez le même object Cast pour chaque entrée. A chaque itération, vous venez de changer le même object pour en créer un nouveau.

Ce code devrait le corriger:

 JSONArray jCastArr = jObj.getJSONArray("abridged_cast"); ArrayList castList= new ArrayList(); for (int i=0; i < jCastArr.length(); i++) { Cast person = new Cast(); // create a new object here JSONObject jpersonObj = jCastArr.getJSONObject(i); person.castId = (String) jpersonObj.getString("id"); person.castFullName = (String) jpersonObj.getString("name"); castList.add(person); } details.castList = castList; 

Lorsque j’ai essayé la suggestion de @vipw, j’ai été confronté à cette exception: The method getJSONObject(int) is undefined for the type JSONArray

Cela a fonctionné pour moi à la place:

 int myJsonArraySize = myJsonArray.size(); for (int i = 0; i < myJsonArraySize; i++) { JSONObject myJsonObject = (JSONObject) myJsonArray.get(i); // Do whatever you have to do to myJsonObject... } 

Lors d’une itération sur un tableau JSON (org.json.JSONArray, intégré à Android), faites attention aux objects null ; Par exemple, vous pouvez obtenir "null" au lieu d’une chaîne nulle .

Un chèque peut ressembler à:

 s[i] = array.isNull(i) ? null : array.getSsortingng(i);