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.