XML konvertálása JSON formátumba a Jackson használatával

1. Áttekintés

Ebben az oktatóanyagban megtudhatjuk, hogyan lehet XML-üzenetet konvertálni JSON-ba Jackson segítségével.

Jackson számára új olvasók számára fontolja meg először az alapok megismerését.

2. Bevezetés Jacksonba

Gondolhatunk arra, hogy a JSON-t három különböző módon elemezzük Jacksonnal:

  • Az első és a leggyakoribb az adatkötés a ObjectMapper
  • A második a fa adatszerkezetének leképezése a TreeTraversingParser és JsonNode
  • A harmadik pedig a fa adatszerkezetét kódolással, felhasználással továbbítja JsonParser és JsonGenerator

Most Jackson támogatja az első kettőt az XML adatokhoz is. Mint ilyen, nézzük meg, hogyan segíthet Jackson az egyik formátumról a másikra történő átalakításban.

3. Függőségek

Először hozzá kell adnunk a jackson-databind függőség a mi pom.xml:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

Ez a könyvtár lehetővé teszi számunkra az adatmegkötő API használatát.

A második az jackson-dataformat-xml amely hozzáadja Jackson XML támogatását:

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

4. Adatkötés

Az adatmegkötés, egyszerűen fogalmazva, amikor a sorosított adatokat közvetlenül egy Java objektumra szeretnénk leképezni.

Ennek felfedezéséhez definiáljuk az XML-t a Virág és Szín tulajdonságait:

 Pipacs RED 9 

Ez hasonló ehhez a Java jelöléshez:

public class Virág {private String név; privát szín; magán Integer szirmok; // getterek és beállítók} public enum Szín {RÓZSAS, KÉK, SÁRGA, VÖRÖS; }

Első lépésünk az XML elemzése lesz a Virág példa. Ehhez hozzunk létre egy példányt XmlMapper, Jackson XML-megfelelője ObjectMapper és használja azt readValue módszer:

XmlMapper xmlMapper = új XmlMapper (); Virágmák = xmlMapper.readValue (xml, Virág.osztály);

Ha megvan a miénk Virág Például JSON néven szeretnénk kiírni az ismerős segítségével ObjectMapper:

ObjectMapper mapper = új ObjectMapper (); Karakterlánc json = mapper.writeValueAsString (pipacs);

Ennek eredményeként megkapjuk a JSON megfelelőt:

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

5. Fa bejárása

Időnként a fa szerkezetére való közvetlen nézés nagyobb rugalmasságot kínálhat, például abban az esetben, ha nem egy közvetítő osztályt akarunk fenntartani, vagy csak a szerkezet egy részét akarjuk átalakítani.

Bár, amint látni fogjuk, némi kompromisszummal jár.

Az első lépés hasonló az első lépéshez, amikor az adatkötést használjuk. Ezúttal azonban a readTree módszer:

XmlMapper xmlMapper = új XmlMapper (); JsonNode csomópont = xmlMapper.readTree (xml.getBytes ());

Miután ezt megtette, lesz egy JsonNode amelynek 3 gyermeke van, amire számítottunk: név, szín, és szirmok.

Ezután újra felhasználhatjuk ObjectMapper, csak elküldi a mi JsonNode helyette:

ObjectMapper jsonMapper = new ObjectMapper (); Karakterlánc json = jsonMapper.writeValueAsString (csomópont);

Az eredmény kissé eltér az utolsó példánktól:

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

Gondos ellenőrzés után láthatjuk, hogy a szirmok attribútum szám helyett karakterláncba van sorozva!Ez azért van, mert readTree nem határozza meg az adattípust kifejezett meghatározás nélkül.

5.1. Korlátozások

És vannak bizonyos korlátai a Jackson XML fa átjárási támogatásának:

  • Jackson nem tud különbséget tenni egy objektum és egy tömb között. Mivel az XML-nek nincsenek natív struktúrái, amelyek megkülönböztetnének egy objektumot az objektumok listájától, Jackson egyszerűen összeveti az ismételt elemeket egyetlen értékbe.
  • És mivel Jackson minden egyes XML elemet egy JSON csomópontra akar feltérképezni, nem támogatja a vegyes tartalmat.

Ezen okok miatt a hivatalos Jackson-dokumentumok azt javasolják, hogy ne használjanak fa modelleket az XML elemzésére.

6. Memória korlátozások

Most mindkettőnek van egy figyelemre méltó hátránya, hogy az átalakítás végrehajtásához az egész XML-nek egyszerre kell lennie a memóriában. Amíg Jackson nem támogatja a faszerkezet zsetonként történő streaming-jét, addig ragaszkodunk ehhez a korlátozáshoz, vagy meg kell vizsgálnunk, hogy mi a saját XMLStreamReader.

7. Következtetés

Ebben az oktatóanyagban röviden megismertük azokat a különböző módszereket, amelyekkel Jackson el tudja olvasni az XML-adatokat és megírhatja azokat a JSON-nak. Ezenkívül gyorsan megvizsgáltuk az egyes támogatott megközelítések korlátait.

Szokás szerint az oktatóanyaghoz tartozó teljes forráskód elérhető a GitHubon.