JSON – Itérer via JSONArray

J’ai un fichier JSON avec quelques tableaux. Je veux parcourir les tableaux de fichiers et obtenir leurs éléments et leurs valeurs.

Voici comment mon fichier ressemble à:

{ "JObjects": { "JArray1": [ { "A": "a", "B": "b", "C": "c" }, { "A": "a1", "B": "b2", "C": "c3", "D": "d4" "E": "e5" }, { "A": "aa", "B": "bb", "C": "cc", "D": "dd" } ] } } 

Voici à quel point je suis venu:

 JSONObject object = new JSONObject("json-file.json"); JSONObject getObject = object.getJSONObject("JObjects"); JSONArray getArray = getObject.getJSONArray("JArray1"); for(int i = 0; i < getArray.size(); i++) { JSONObject objects = getArray.getJSONArray(i); //Iterate through the elements of the array i. //Get thier value. //Get the value for the first element and the value for the last element. } 

Est-il possible de faire quelque chose comme ça?

La raison pour laquelle je veux le faire est que les tableaux du fichier ont un nombre d’éléments différent.

Changement

 JSONObject objects = getArray.getJSONArray(i); 

à

 JSONObject objects = getArray.getJSONObject(i); 

ou pour

 JSONObject objects = getArray.optJSONObject(i); 

en fonction de la bibliothèque JSON-to / from-Java que vous utilisez. (Il semble que getJSONObject fonctionnera pour vous.)

Ensuite, pour accéder aux éléments de chaîne dans l’object JSONObject “Objets”, obtenez-les par nom d’élément.

 Ssortingng a = objects.get("A"); 

Si vous avez besoin des noms des éléments dans JSONObject , vous pouvez utiliser la méthode de l’utilitaire statique JSONObject.getNames(JSONObject) pour le faire.

 Ssortingng[] elementNames = JSONObject.getNames(objects); 

Msgstr “Obtenir la valeur du premier élément et la valeur du dernier élément.”

Si “element” fait référence au composant dans le tableau, notez que le premier composant est à l’index 0 et que le dernier composant est à l’index getArray.length() - 1 .


Je veux parcourir les objects du tableau et obtenir leur valeur et leur valeur. Dans mon exemple, le premier object a 3 composants, le scond a 5 et le troisième 4 composants. Je veux iterate chacun d’eux et obtenir le nom et la valeur de leur composant.

Le code suivant fait exactement cela.

 import org.json.JSONArray; import org.json.JSONObject; public class Foo { public static void main(Ssortingng[] args) throws Exception { Ssortingng jsonInput = "{\"JObjects\":{\"JArray1\":[{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\"},{\"A\":\"a1\",\"B\":\"b2\",\"C\":\"c3\",\"D\":\"d4\",\"E\":\"e5\"},{\"A\":\"aa\",\"B\":\"bb\",\"C\":\"cc\",\"D\":\"dd\"}]}}"; // "I want to iterate though the objects in the array..." JSONObject outerObject = new JSONObject(jsonInput); JSONObject innerObject = outerObject.getJSONObject("JObjects"); JSONArray jsonArray = innerObject.getJSONArray("JArray1"); for (int i = 0, size = jsonArray.length(); i < size; i++) { JSONObject objectInArray = jsonArray.getJSONObject(i); // "...and get thier component and thier value." String[] elementNames = JSONObject.getNames(objectInArray); System.out.printf("%d ELEMENTS IN CURRENT OBJECT:\n", elementNames.length); for (String elementName : elementNames) { String value = objectInArray.getString(elementName); System.out.printf("name=%s, value=%s\n", elementName, value); } System.out.println(); } } } /* OUTPUT: 3 ELEMENTS IN CURRENT OBJECT: name=A, value=a name=B, value=b name=C, value=c 5 ELEMENTS IN CURRENT OBJECT: name=D, value=d4 name=E, value=e5 name=A, value=a1 name=B, value=b2 name=C, value=c3 4 ELEMENTS IN CURRENT OBJECT: name=D, value=dd name=A, value=aa name=B, value=bb name=C, value=cc */ 
 for (int i = 0; i < getArray.length(); i++) { JSONObject objects = getArray.getJSONObject(i); Iterator key = objects.keys(); while (key.hasNext()) { String k = key.next().toString(); System.out.println("Key : " + k + ", value : " + objects.getString(k)); } // System.out.println(objects.toString()); System.out.println("-----------"); } 

J'espère que cela aide quelqu'un

 for(int i = 0; i < getArray.size(); i++){ Object object = getArray.get(i); // now do something with the Object } 

Vous devez vérifier le type:

Les valeurs peuvent être l'un de ces types: booléen, JSONArray, JSONObject, Number, Ssortingng ou l'object JSONObject.NULL. [ Source ]

Dans votre cas, les éléments seront de type JSONObject, vous devez donc convertir en JSONObject et appeler JSONObject.names() pour récupérer les clés individuelles.

 JsonArray jsonArray; Iterator it = jsonArray.iterator(); while(it.hasNext()){ System.out.println(it.next()); } 

Vous pouvez essayer ma méthode récursive (* fortement empruntée à divers sites) pour parcourir tous les objects JSON et tableaux JSON jusqu’à ce que vous trouviez des éléments JSON. Cet exemple recherche en fait une clé particulière et renvoie toutes les valeurs pour toutes les instances de cette clé. “searchKey” est la clé que vous recherchez.

 ArrayList myList = new ArrayList(); myList = findMyKeyValue(yourJsonPayload,null,"A"); //if you only wanted to search for A's values private ArrayList findMyKeyValue(JsonElement element, Ssortingng key, Ssortingng searchKey) { //OBJECT if(element.isJsonObject()) { JsonObject jsonObject = element.getAsJsonObject(); //loop through all elements in object for (Map.Entry entry : jsonObject.entrySet()) { JsonElement array = entry.getValue(); findMyKeyValue(array, entry.getKey(), searchKey); } //ARRAY } else if(element.isJsonArray()) { //when an array is found keep 'key' as that is the array's name ie pass it down JsonArray jsonArray = element.getAsJsonArray(); //loop through all elements in array for (JsonElement childElement : jsonArray) { findMyKeyValue(childElement, key, searchKey); } //NEITHER } else { //System.out.println("SKey: " + searchKey + " Key: " + key ); if (key.equals(searchKey)){ listOfValues.add(element.getAsSsortingng()); } } return listOfValues; }