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.


$config[zx-auto] not found$config[zx-overlay] not found