J'utilise une bibliothèque JSON appelée JSONObject
(cela ne me dérange pas de changer si je le dois).
Je sais comment itérer dessus JSONArrays
, mais lorsque j'analyse des données JSON de Facebook, je n'obtiens pas de tableau, seulement un JSONObject
, mais je dois pouvoir accéder à un élément via son index, par exemple JSONObject[0]
pour obtenir le premier, et je ne peut 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
}
}
Réponses:
Peut-être que cela aidera:
la source
JSONObject
sont pas ordonnées et votre assertion était un simple reflet d'une implémentation privée;)for (String key : keys)
pour mon cas, j'ai trouvé que les
names()
travaux étaient bienla source
Iterating
en Java, il fonctionne plutôt bien! Merci.J'éviterai l'itérateur car ils peuvent ajouter / supprimer un objet pendant l'itération, également pour une utilisation propre du code pour la boucle. ce sera tout simplement propre et moins de lignes.
Utilisation de Java 8 et Lamda [Mise à jour 4/2/2019]
Utiliser l'ancienne méthode [Mise à jour 4/2/2019]
Réponse originale
la source
Je ne peux pas croire qu'il n'y ait pas de solution plus simple et sécurisée que d'utiliser un itérateur dans ces réponses ...
La
names ()
méthode JSONObject renvoie uneJSONArray
desJSONObject
clés, vous pouvez donc simplement la parcourir en boucle:la source
JSONObject
. Quelque chose commeJSONObject object = new JSONObject ("{\"key1\",\"value1\"}");
. Mais ne mettez pas JSON cru, y ajouter des éléments dans avecput ()
méthode:object.put ("key1", "value1");
.la source
jsonChildObject = iterator.next();
devrait probablement définirjsonChildObject
, commeJSONObject jsonChildObject = iterator.next();
, non?Iterator<JSONObject>
donnera un avertissement. Je le remplacerais par le générique<?>
et ferais un casting sur l'appel ànext()
. En outre, j'utiliseraisgetString("id")
au lieu d'get("id")
enregistrer pour faire un casting.org.json.JSONObject a maintenant une méthode keySet () qui retourne un
Set<String>
et peut facilement être bouclée avec un for-each.la source
Mettez d'abord cela quelque part:
Ou si vous avez accès à Java8, juste ceci:
Ensuite, parcourez simplement les valeurs et les clés de l'objet:
la source
J'ai créé une petite fonction récursive qui parcourt l'intégralité de l'objet json et enregistre le chemin de clé et sa valeur.
la source
Avec Java 8 et lambda, plus propre:
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#forEachRemaining-java.util.function.Consumer-
la source
Nous avons utilisé l'ensemble de code ci-dessous pour parcourir les
JSONObject
champsla source
J'ai eu une fois un json qui avait des identifiants qui devaient être incrémentés d'un car ils étaient indexés 0 et cela cassait l'incrémentation automatique de Mysql.
Donc, pour chaque objet, j'ai écrit ce code - pourrait être utile à quelqu'un:
usage:
cela peut être transformé pour fonctionner pour JSONArray comme objet parent aussi
la source
La plupart des réponses sont ici pour les structures JSON plates, au cas où vous auriez un JSON qui pourrait avoir des JSONArrays ou des JSONObjects imbriqués, la vraie complexité se pose. L'extrait de code suivant prend en charge une telle exigence métier. Il prend une carte de hachage et un JSON hiérarchique avec les JSONArrays et les JSONObjects imbriqués et met à jour le JSON avec les données de la carte de hachage
Vous devez remarquer ici que le type de retour de ceci est nul, mais les objets sice sont passés comme refernce ce changement est re-sélectionné à l'appelant.
la source
Le code ci-dessous a bien fonctionné pour moi. S'il vous plaît, aidez-moi si le réglage peut être fait. Cela obtient toutes les clés, même à partir des objets JSON imbriqués.
la source
Ceci est une autre solution de travail au problème:
la source