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.