Comment effectuer une itération sur un JSONObject?
- Je utiliser une librairie JSON appelé JSONObject
(je n'ai pas l'esprit de commutation si j'en ai besoin).
Je sais comment itérer sur JSONArrays
, mais quand j'ai analyser les données JSON à partir de Facebook je ne suis pas un tableau, mais seulement un JSONObject
, mais j'ai besoin d'être en mesure d'accéder à un élément par son indice, comme JSONObject[0]
pour le premier, et je ne peux pas comprendre comment le faire.
{
"http://http://url.com/": {
"id": "http://http://url.com//"
},
"http://url2.co/": {
"id": "http://url2.com//",
"shares": 16
}
,
"http://url3.com/": {
"id": "http://url3.com//",
"shares": 16
}
}
- Essayez ceci: androidbeasts.wordpress.com/2015/08/04/json-parsing-tutorial
- essayez ceci : stackoverflow.com/a/56223923/10268067
Vous devez vous connecter pour publier un commentaire.
Peut-être que cela aidera à:
JSONObject
sont non ordonnée et votre affirmation était un simple reflet de la mise en œuvre privée 😉for (String key : keys)
jsonObject.keySet().iterator()
et il fonctionne très bien.pour mon cas, j'ai trouvé une itération à l'
names()
fonctionne bienIterating
en Java, il fonctionne très bien! Merci.Je vais éviter de itérateur comme ils peuvent ajouter/supprimer un objet au cours d'une itération, également pour le nettoyage de code à utiliser pour la boucle. il sera tout simplement clean & moins de lignes.
À l'aide de Java 8 et Lamda [mise à Jour 4/2/2019]
À l'aide de vieux chemin [mise à Jour 4/2/2019]
Réponse Originale À Cette Question
Ne peux pas croire il n'y a pas plus simple et sécurisé solution que d'utiliser un itérateur dans cet réponses...
JSONObject
names ()
méthode retourne un JSONArray de la JSONObject touches, de sorte que vous pouvez tout simplement marcher si elle en boucle:JSONObject
. Quelque chose commeJSONObject object = new JSONObject ("{\"key1\",\"value1\"}");
. Mais ne mettez pas cru json, les ajouter des éléments avecput ()
méthode:object.put ("key1", "value1");
.jsonChildObject = iterator.next();
devrait probablement définirjsonChildObject
, commeJSONObject jsonChildObject = iterator.next();
, non?Iterator<JSONObject>
donnera un avertissement. Je voudrais le remplacer par le générique<?>
et de faire un cast sur l'appel ànext()
. Aussi, je ne l'utiliseraisgetString("id")
au lieu deget("id")
pour enregistrer de faire un cast.org.json.JSONObject a maintenant un keySet() méthode qui renvoie une
Set<String>
et peut facilement être bouclé avec un for-each.D'abord mis cela quelque part:
Ou si vous avez accès à Java8, juste ceci:
Puis il suffit de parcourir l'objet de clés et de valeurs:
J'ai fait une petite fonction récursive qui passe au travers de l'ensemble de l'objet json et enregistre le chemin d'accès clé et sa valeur.
Avec Java 8 et lambda, nettoyant:
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#forEachRemaining-java.util.function.Consumer-
Une fois, j'ai eu un json qui avait des id qui doit être incrémenté de un depuis qu'ils étaient de 0 indexés et qui a été la rupture de Mysql auto-incrément.
Donc, pour chaque objet, j'ai écrit ce code peut être utile à quelqu'un:
utilisation:
cela peut être transformée en travail pour JSONArray comme objet parent trop
Nous avons utilisé ci-dessous de code pour effectuer une itération sur
JSONObject
champsCi-dessous le code a bien fonctionné pour moi. Merci de m'aider si le paramétrage peut être effectué. Il obtient toutes les clés, même à partir de la imbriquée objets JSON.
C'est est une autre solution au problème: