Używam biblioteki JSON o nazwie JSONObject
(nie mam nic przeciwko przełączaniu, jeśli trzeba).
Wiem, jak iterować JSONArrays
, ale kiedy analizuję dane JSON z Facebooka, nie otrzymuję tablicy, tylko jedno JSONObject
, ale muszę mieć dostęp do elementu za pośrednictwem jego indeksu, na przykład JSONObject[0]
pierwszego, a ja nie mogę wymyślić, jak to zrobić.
{
"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
}
}
Odpowiedzi:
Może to pomoże:
źródło
JSONObject
są nieuporządkowane, a twoje twierdzenie było prostym odzwierciedleniem prywatnej implementacji;)for (String key : keys)
w moim przypadku iteracja
names()
działa dobrzeźródło
Iterating
w Javie, działa całkiem dobrze! Dzięki.Unikam iteratora, ponieważ mogą dodawać / usuwać obiekty podczas iteracji, również w celu użycia czystego kodu w pętli. będzie po prostu czysty i mniej linii.
Korzystanie z Java 8 i Lamda [Aktualizacja 4/2/2019]
Używając starego sposobu [Aktualizacja 4/2/2019]
Oryginalna odpowiedź
źródło
Nie mogę uwierzyć, że nie ma prostszego i bezpieczniejszego rozwiązania niż użycie iteratora w tych odpowiedziach ...
names ()
Metoda JSONObject zwraca aJSONArray
zJSONObject
kluczy, dzięki czemu można po prostu przejść w pętli:źródło
JSONObject
. Coś jakJSONObject object = new JSONObject ("{\"key1\",\"value1\"}");
. Ale nie umieścić surowego JSON do niego dodawać elementy w nim zput ()
metodą:object.put ("key1", "value1");
.źródło
jsonChildObject = iterator.next();
prawdopodobnie powinien określićjsonChildObject
, jakJSONObject jsonChildObject = iterator.next();
, nie?Iterator<JSONObject>
da ostrzeżenie. Zamieniłbym to na ogólne<?>
i wykonałem rzut na wezwanie donext()
. Ponadto użyłbymgetString("id")
zamiastget("id")
oszczędzać, wykonując rzut.org.json.JSONObject ma teraz metodę keySet (), która zwraca a
Set<String>
i może być łatwo zapętlona za pomocą for-each.źródło
Najpierw umieść to gdzieś:
Lub jeśli masz dostęp do Java8, po prostu to:
Następnie po prostu iteruj po kluczach i wartościach obiektu:
źródło
Zrobiłem małą funkcję rekurencyjną, która przechodzi przez cały obiekt json i zapisuje ścieżkę klucza i jego wartość.
źródło
W Javie 8 i lambda czystsze:
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#forEachRemaining-java.util.function.Consumer-
źródło
Użyliśmy poniższego zestawu kodów do iteracji po
JSONObject
polachźródło
Kiedyś miałem JSON, który miał identyfikatory, które musiały być zwiększane o jeden, ponieważ były indeksowane 0, a to łamało autodetekcję Mysql.
Więc dla każdego obiektu napisałem ten kod - może być komuś pomocny:
stosowanie:
można to również przekształcić do pracy dla JSONArray jako obiektu nadrzędnego
źródło
Większość odpowiedzi tutaj dotyczy płaskich struktur JSON, w przypadku, gdy masz JSON, który mógł zagnieżdżać tablice JSONArrays lub zagnieżdżone obiekty JSONO, powstaje prawdziwa złożoność. Poniższy fragment kodu spełnia takie wymagania biznesowe. Pobiera mapę skrótu i hierarchiczny JSON z zagnieżdżonymi tablicami JSONArchys i JSONObjects i aktualizuje JSON danymi w mapie skrótu
Należy tutaj zauważyć, że typ zwracany jest nieważny, ale obiekty sice są przekazywane jako refernce, zmiana ta zostaje ponownie przypisana do osoby dzwoniącej.
źródło
Poniższy kod działał dla mnie dobrze. Proszę o pomoc, jeśli można dokonać strojenia. Otrzymuje wszystkie klucze nawet z zagnieżdżonych obiektów JSON.
źródło
To jest kolejne działające rozwiązanie problemu:
źródło