Iteriranje preko instance org.json.JSONObject
1. Uvod
U ovom ćemo tutorijalu pogledati nekoliko pristupa za ponavljanje a JSONObject, jednostavan JSON prikaz za Javu.
Počet ćemo s naivnim rješenjem, a zatim ćemo pogledati nešto malo robusnije.
2. Iteriranje kroz a JSONObject
Počnimo s jednostavnim slučajem ponavljanja JSON-a parova imena i vrijednosti:
{"name": "Cake", "cakeId": "0001", "cakeShape": "Heart"}
Za to možemo jednostavno prelistavanje tipki pomoću tipke () metoda:
void handleJSONObject (JSONObject jsonObject) {jsonObject.keys (). forEachRemaining (key -> {Vrijednost objekta = jsonObject.get (key); logger.info ("Key: {0} \ tValue: {1}", key, value );}}
A naš izlaz bit će:
Ključ: ime Vrijednost: Torta Ključ: kolačId Vrijednost: 0001 Ključ: kolačVrijednost oblika: Srce
3. Putovanje kroz a JSONObject
Ali recimo da imamo složeniju strukturu:
{"batters": [{"type": "Regular", "id": "1001"}, {"type": "Chocolate", "id": "1002"}, {"type": "BlueBerry" , "id": "1003"}], "name": "Torta", "cakeId": "0001"}
Što u ovom slučaju znači ponavljanje tipki?
Pogledajmo što su naši naivni tipke () pristup bi nam dao:
Ključ: tijesta Vrijednost: [{"type": "Regular", "id": "1001"}, {"type": "Chocolate", "id": "1002"}, {"type": "BlueBerry" , "id": "1003"}] Ključ: ime Vrijednost: Ključ kolača: kolačId Vrijednost: 0001
Ovo, možda, nije baš od pomoći. Čini se kao što želimo u ovom slučaju nije iteracija, već prijelaz.
Putujući kroz a JSONObject razlikuje se od ponavljanja kroz JSONObject‘S set ključeva.
Za ovo, zapravo moramo provjeriti i vrstu vrijednosti. Zamislimo da to radimo zasebnom metodom:
void handleValue (vrijednost objekta) {if (vrijednost instance JSONObject) {handleJSONObject ((JSONObject) value); } else if (vrijednost instance JSONArray) {handleJSONArray ((JSONArray) value); } else {logger.info ("Vrijednost: {0}", vrijednost); }}
Tada je naš pristup još uvijek prilično sličan:
void handleJSONObject (JSONObject jsonObject) {jsonObject.keys (). forEachRemaining (key -> {Vrijednost objekta = jsonObject.get (key); logger.info ("Key: {0}", key); handleValue (value);} ); }
Jedino što moramo razmišljati o tome kako postupati s nizovima.
4. Putovanje kroz a JSONArray
Pokušajmo zadržati sličan pristup korištenju iteratora. Umjesto da zove tipke ()ipak ćemo nazvati iterator ():
void handleJSONArray (JSONArray jsonArray) {jsonArray.iterator (). forEachRemaining (element -> {handleValue (element)}); }
Ovo je rješenje sada ograničeno jer kombiniramo prijelaz s akcijom koju želimo poduzeti. Uobičajeni pristup razdvajanju njih dvoje bio bi korištenje uzorka Visitor.
5. Zaključak
U ovom smo članku vidjeli način za ponavljanje a JSONObject za jednostavne parove ime-vrijednost, problem povezan sa složenim strukturama i tehnika obilaženja za njegovo rješavanje.
Naravno, ovo je bila metoda prijelaza prvo u dubinu, ali mogli smo prvo u širinu na sličan način.
Kompletni kod za primjer dostupan je na Githubu.