Iterácia nad inštanciou org.json.JSONObject

1. Úvod

V tomto výučbe sa pozrieme na niekoľko prístupov k iterácii cez a JSONObject, jednoduchá reprezentácia JSON pre Javu.

Začneme s naivným riešením a potom sa pozrieme na niečo trochu robustnejšie.

2. Iterácia cez a JSONObject

Začnime s jednoduchým prípadom iterácie JSON párov mien-hodnota:

{"name": "Cake", "cakeId": "0001", "cakeShape": "Srdce"}

Za týmto účelom môžeme jednoducho iterovať pomocou klávesov pomocou klávesy () metóda:

void handleJSONObject (JSONObject jsonObject) {jsonObject.keys (). forEachRemaining (key -> {Object value = jsonObject.get (key); logger.info ("Key: {0} \ tValue: {1}", key, value );}}

A náš výstup bude:

Kľúč: názov Hodnota: Cake Kľúč: cakeId Hodnota: 0001 Kľúč: cakeShape Hodnota: Srdce

3. Traversing Through a JSONObject

Ale povedzme, že máme zložitejšiu štruktúru:

{"batters": [{"type": "Regular", "id": "1001"}, {"type": "Chocolate", "id": "1002"}, {"type": "BlueBerry" , "id": "1003"}], "name": "Cake", "cakeId": "0001"}

Čo v tomto prípade znamená iterácia pomocou klávesov?

Poďme sa pozrieť na to, čo je naše naivné klávesy () prístup by nám dal:

Kľúč: paličky Hodnota: [{"type": "Regular", "id": "1001"}, {"type": "Chocolate", "id": "1002"}, {"type": "BlueBerry" , "id": "1003"}] Kľúč: názov Hodnota: torta Kľúč: cakeId Hodnota: 0001

To možno nie je také užitočné. Vyzerá to, že čo v tomto prípade nechceme iteráciu, ale priechod.

Traversing a JSONObject sa líši od iterácie prostredníctvom a JSONObjectSada kľúčov.

Pre to, vlastne musíme skontrolovať aj typ hodnoty. Poďme si predstaviť, že to robíme samostatnou metódou:

void handleValue (hodnota objektu) {if (hodnota instanceof JSONObject) {handleJSONObject ((JSONObject) hodnota); } else if (hodnota instanceof JSONArray) {handleJSONArray ((JSONArray) hodnota); } else {logger.info ("Hodnota: {0}", hodnota); }}

Náš prístup je potom stále dosť podobný:

void handleJSONObject (JSONObject jsonObject) {jsonObject.keys (). forEachRemaining (key -> {Object value = jsonObject.get (key); logger.info ("Key: {0}", key); handleValue (value);} ); }

Jediná vec je, že musíme premýšľať o tom, ako zaobchádzať s poľami.

4. Traversing Through a JSONArray

Pokúsme sa zachovať podobný prístup ako pri použití iterátora. Namiesto telefonovania klávesy (), však zavoláme iterátor ():

void handleJSONArray (JSONArray jsonArray) {jsonArray.iterator (). forEachRemaining (element -> {handleValue (element)}); }

Toto riešenie je teraz limitujúce, pretože kombinujeme prechod s činnosťou, ktorú chceme podniknúť. Spoločným prístupom k ich oddeleniu by bolo použitie modelu Návštevník.

5. Záver

V tomto článku sme videli spôsob, ako iterovať cez a JSONObject pre jednoduché páry názov-hodnota problém spojený so zložitými štruktúrami a technika prechodu, ktorá ho má vyriešiť.

Samozrejme, toto bola hĺbková prvá traverzová metóda, ale mohli sme urobiť celú šírku podobným spôsobom.

Celý kód príkladu je k dispozícii na stránkach Github.


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