Preveďte XML na JSON pomocou Jacksona

1. Prehľad

V tomto tutoriáli sa dozvieme, ako prevádzať správu XML na JSON pomocou Jacksona.

Pre čitateľov, ktorí sú v Jacksone noví, zvážte najskôr oboznámenie sa so základmi.

2. Úvod do Jacksona

Môžeme uvažovať o analýze JSON tromi rôznymi spôsobmi s Jacksonom:

  • Prvá a najbežnejšia je väzba údajov s ObjectMapper
  • Druhým je mapovanie na stromovú dátovú štruktúru pomocou TreeTraversingParser a JsonNode
  • A tretím je streamovanie stromovej dátovej štruktúry pomocou tokenov pomocou JsonParser a JsonGenerator

Jackson teraz podporuje aj prvé dva pre údaje XML. Pozrime sa teda, ako nám Jackson môže pomôcť pri konverzii z jedného formátu do druhého.

3. Závislosti

Najprv musíme pridať jackson-databind závislosť na našom pom.xml:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

Táto knižnica nám umožní používať API viazania údajov.

Druhá je jackson-dataformat-xml ktorý pridáva Jacksonovu podporu XML:

 com.fasterxml.jackson.dataformat jackson-dataformat-xml 2.11.1 

4. Väzba údajov

Zjednodušene povedané, dátová väzba je, keď chceme mapovať serializované údaje priamo na objekt Java.

Ak to chcete preskúmať, definujme náš XML pomocou Kvetina a Farba vlastnosti:

 Mak RED 9 

Toto je podobné tejto notácii Java:

verejná trieda Kvet {súkromné ​​meno reťazca; súkromná farebná farba; súkromné ​​celočíselné lístky; // getre a setre} verejné výpisy Farba {RUŽOVÁ, MODRÁ, ŽLTÁ, ČERVENÁ; }

Naším prvým krokom bude parsovanie XML na a Kvetina inštancia. Aby sme to dosiahli, vytvorme inštanciu XmlMapper, Jacksonov ekvivalent XML pre ObjectMapper a používať jeho readValue metóda:

XmlMapper xmlMapper = nový XmlMapper (); Kvetinový mak = xmlMapper.readValue (xml, Flower.class);

Keď už máme svoje Kvetina napríklad ho budeme chcieť zapísať ako JSON pomocou známeho ObjectMapper:

ObjectMapper mapovač = nový ObjectMapper (); Reťazec json = mapper.writeValueAsString (mak);

A ako výsledok dostaneme náš ekvivalent JSON:

{"name": "Poppy", "color": "RED", "petals": 9}

5. Traverz stromu

Pohľad priamo na stromovú štruktúru môže niekedy ponúknuť väčšiu flexibilitu, napríklad v prípade, že nechceme udržiavať sprostredkovateľskú triedu alebo chceme previesť iba časť štruktúry.

Ako však uvidíme, prichádza s určitými kompromismi.

Prvý krok je podobný nášmu prvému kroku, keď používame väzbu údajov. Tentokrát však použijeme readTree metóda:

XmlMapper xmlMapper = nový XmlMapper (); Uzol JsonNode = xmlMapper.readTree (xml.getBytes ());

Keď to urobíme, budeme mať JsonNode ktorá má 3 deti, ako sme očakávali: meno, farba, a okvetné lístky.

Potom môžeme opäť použiť ObjectMapper, stačí poslať náš JsonNode namiesto toho:

ObjectMapper jsonMapper = nový ObjectMapper (); Reťazec json = jsonMapper.writeValueAsString (uzol);

Výsledok sa teraz v porovnaní s našim posledným príkladom mierne líši:

{"name": "Poppy", "color": "RED", "petals": "9"}

Po dôkladnej kontrole vidíme, že atribút petals je serializovaný do reťazca namiesto čísla!To je preto, že readTree neodvodzuje údajový typ bez výslovnej definície.

5.1. Obmedzenia

S Jacksonovou podporou prechodu stromom XML existujú určité obmedzenia:

  • Jackson nemôže rozlišovať medzi objektom a poľom. Pretože XML nemá natívne štruktúry na odlíšenie objektu od zoznamu objektov, Jackson jednoducho spojí opakované prvky do jednej hodnoty.
  • A keďže Jackson chce mapovať každý prvok XML na uzol JSON, nepodporuje zmiešaný obsah.

Z týchto dôvodov odporúčajú oficiálne dokumenty Jacksona nepoužívať na analýzu XML modely Tree.

6. Pamäťové obmedzenia

Teraz majú obaja pozoruhodnú nevýhodu, že na uskutočnenie prevodu musí byť v pamäti naraz celý XML. Kým Jackson nepodporuje streamovanie stromovej štruktúry ako tokeny, zostaneme s týmto obmedzením alebo sa budeme musieť pozrieť na to, ako vytvoriť vlastnú pomocou niečoho ako XMLStreamReader.

7. Záver

V tomto tutoriáli sme sa stručne naučili rôzne spôsoby, ako môže Jackson čítať údaje XML a zapisovať ich do formátu JSON. Tiež sme sa rýchlo pozreli na obmedzenia každého podporovaného prístupu.

Celý zdrojový kód, ktorý je sprievodcom výukovým programom, je ako obvykle k dispozícii na GitHub.


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