Konvertálja a JSON-t XML-re Java Gson és JAXB használatával

⚡ Okos összefoglaló

Konvertálja a JSON-t XML-re Java Gson és JAXB használatával térkép alapjánping mindkét formátum ugyanarra a jegyzetelt Java osztályok. Ez a cikk definiálja az egyes formátumokat, beállítja a projektet, JAXB segítségével szétválasztja az XML-t, Gson segítségével JSON-t ír, és megfordítja az egész folyamatot.

  • 🗝️ JSON struktúra: Az adatokat kulcs-érték párokként tárolja a rendszer kapcsos zárójelek között, vesszővel elválasztva az egyes bejegyzéseket.
  • 🏷️ XML struktúra: Az adatokat beágyazott csomópontokban tároljuk, ahol minden nyitó címkéhez egy megfelelő záró címke szükséges.
  • 🔗 Megosztott modell: Egy készlet jegyzetekkel Java Az osztályok hídként működnek, így egyik formátum sem kerül közvetlenül a másikba elemzésre.
  • 📥 Leszerelés: A JAXB beolvas egy XML fájlt, és egy feltöltött értéket ad vissza. Java objektumfa az Unmarshaller osztályon keresztül.
  • 📤 Streaming írás: A Gson JsonWriter A JSON-t inkrementálisan bocsátja ki a beginObject, name, value és endObject hívásokkal.
  • 🔄 Reverse Pálya: A JsonReader újraépíti az objektumokat JSON-ból, és a JAXB Marshaller XML-ként írja ki azokat.
  • ⚠️ Futásidejű megjegyzés: JAXB ekkor hagyta el a JDK-t: Java 11, tehát a jakarta.xml.bind függőséget explicit módon hozzá kell adni.

JSON konvertálása XML-re Java

Mi a JSON?

A JSON a szó rövidítése JavaA Script Object Notation egy olyan adatformátum, amely a legtöbb programozási nyelv által olvasható szabályokat követi. Könnyen elmenthetjük fájlba vagy tárolhatjuk adatbázisban. A JSON formátum kulcs-érték párokat használ az adatok leírására.

A következő példában egy személyes adatokat tároló JSON karakterláncot definiálunk:

{
"username" : "guru99user",
"email" : "guru99user@mail.com"
}

Tehát a JSON szintaxisa nagyon egyszerű. Minden adatelem két részből áll, egy kulcsból és egy értékből, amelyek megfelelnek a mező nevének és értékének egy rekordban. Továbbtekintve, van néhány szabály, mint ez:

  • A JSON-karakterláncot kapcsos zárójelek veszik körül {}.
  • A JSON kulcsait dupla idézőjelek közé kell tenni, a karakterlánc értékeket is idézőjelek közé.
  • Ha több adat van (több kulcs => érték pár), akkor vesszővel (,) választjuk el őket.
  • A JSON-kulcsoknak sima betűket, számokat vagy aláhúzás karaktert kell használniuk, szóközök nélkül, és az első karakter nem lehet szám.

Mi az XML?

Az XML az eXtensible Markup Language rövidítése, amelyet a World Wide Web Consortium javasolt (https://www.w3.org/) más jelölőnyelvek létrehozásához. Ez egy egyszerű részhalmaz, amely sokféle adattípust képes leírni, így nagyon hasznos a rendszerek közötti adatmegosztáshoz.

Az XML címkéi gyakran nincsenek előre definiálva, de a felhasználói konvencióknak megfelelően jönnek létre. XML új funkciókat vezet be a HTML előnyei alapján.

Van néhány hasznos XML funkció a különféle rendszerekhez és megoldásokhoz:

  • Az XML bővíthető: az XML lehetővé teszi saját egyedi címkék létrehozását az alkalmazásnak megfelelően.
  • Az XML adatokat hordoz, nem megjeleníti azokat: az XML lehetővé teszi az adatok tárolását attól függetlenül, hogy azok hogyan jelennek meg.
  • Az XML egy általános szabvány: az XML-t a World Wide Web Consortium (W3C) fejlesztette ki, és nyílt szabványként érhető el.

Az XML beágyazott csomópontstruktúrára épül. Minden csomópontnak van egy nyitó és egy záró címkéje, az alábbiak szerint:

<node>content</node>

Amiben:

  • egy nyitott címke, és a címke nevét Ön határozza meg.
  • egy záró címke, és ennek a címkenek a nevének meg kell egyeznie a nyitó címke nevével.
  • tartalom ez a címke tartalma.

Minden XML fájl tetején deklarálni kell egy címkét, amely jelzi a használt XML verziót. Az utasításcímke szintaxisa:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

JSON vs. XML: Főbb különbségek

Mindkét formátum strukturált adatokat hordoz, és az alábbi táblázat bemutatja, hogy miért kell egy projektnek átváltania közöttük.

Vizsgált paraméter JSON XML
Szintaxis stílus Kulcs-érték párok Beágyazott címkék
Adattípusok Karakterlánc, szám, logikai érték, null, tömb, objektum Csak szöveg, a típusok egy sémából származnak
Attribútumok Nem támogatott Bármely elemen támogatott
Hozzászólások Nem támogatott Támogatott
Bőbeszédűség Kompakt Bővebben fogalmaz, mert a címkék ismétlődnek
Sémaérvényesítés JSON séma, opcionális DTD és XSD, érett
Tipikus felhasználás Webes API-k és konfiguráció Vállalati üzenetküldés és dokumentumok

Mi az a Gson?

Gson (https://github.com/google/gson) egy Java könyvtár, amely lehetővé teszi a felhasználók számára egy konvertálást Java objektum JSON karakterlánccá alakítása, valamint egy JSON karakterlánc visszaalakítása Java objektum. A Gson tetszőlegesen tud dolgozni Java objektumok, beleértve azokat a meglévő objektumokat is, amelyek forráskódja nem áll rendelkezésére.

Az 1.6-os verzió óta a Gson két osztályt vezet be, JsonReader és a jSONWriter, a JSON-adatok streamelt feldolgozásának biztosításához.

  • jSONWriter – JSON-ba streamelt írás. Létrehozunk egy jSONWriter objektum. Egy JSON objektum létrehozásának megkezdéséhez és befejezéséhez a következő függvényeket használjuk: beginObject() és a endObject()E két hívás között párokként írjuk az adatokat (kulcs => érték).
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.endObject();
  • JsonReader – JSON-ból való folyamatos olvasás. Létrehozunk egy JsonReader objektumot. Egy JSON objektum beginObject() és endObject() függvényekkel indítjuk és fejezzük be az olvasást. E két hívás között párokként olvassuk be az adatokat (kulcs => érték).
JsonReader reader = new JsonReader();
reader.beginObject();
while (reader.hasNext()) {
	String name = reader.nextName();
	if (name.equals("key")) {
		String value = reader.nextString();
	}
}
reader.endObject();

A Gson streamelés gyors. Azonban a JSON adatok minden egyes (kulcs => érték) párját Önnek kell kezelnie.

Mi az a JAXB?

A JAXB jelentése Java ArchiTecture for XML Binding, amely egy olyan könyvtár, amely megjegyzéseket használ a konvertáláshoz Java objektumok XML tartalomra és fordítva. Mivel a JAXB-t egy specifikáció definiálja, a szabvány különböző implementációit használhatjuk.

A JAXB esetében gyakran a következő alapvető annotációkat használjuk:

  • @XmlRootElementEz az annotáció az XML fájl legkülső címkéjét határozza meg, ezért egy osztály felett deklarálják.
  • @XmlElementWrapper: Ez a megjegyzés egy burkoló XML elemet hoz létre a gyűjtemények körül.
  • @XmlElementEz a megjegyzés deklarálja, hogy az objektum egy tulajdonsága az XML fájl gyermekcímkéjévé válik.
  • @XmlAttributeEz az annotáció deklarálja, hogy az objektum egy tulajdonsága attribútummá válik a környező címkén.

Az általános megvalósítás a következő. Először inicializáljuk a JAXBContextus objektum a MyObject osztály a konvertáláshoz.

JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class);

Ez a JAXBContextus az objektumnak van egy metódusa, amely létrehoz egy objektumot, amely XML tartalmat konvertál egy Java tárgy, a Unmarshaller.

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

Ugyanaz JAXBContextus egy objektumnak van egy metódusa is, amely létrehozza az objektumot, amely egy konvertálja a Java objektum XML tartalomba, a Marshaller.

Marshaller marshallerObj = jaxbContext.createMarshaller();

⚠️ Figyelmeztetés: A JAXB-t eltávolították a JDK-ból Java 11. Tovább Java 11-es és újabb verziók esetén explicit módon add hozzá az API-t és a futásidejű implementációt a projekthez, például jakarta.xml.bind:jakarta.xml.bind-api Együtt org.glassfish.jaxb:jaxb-runtime, és importálja a megjegyzéseket innen jakarta.xml.bind.annotation helyett javax.xml.bind.annotation.

Hogyan lehet XML-t JSON-ba konvertálni?

Az XML-ről JSON-ra konvertálás példáját a következő platformon valósítjuk meg. Az alábbi verziókat használtuk a képernyőképekhez. A JDK újabb kiadásai, Eclipse, és a Gson ugyanúgy működnek, a fenti JAXB megjegyzésnek megfelelően.

  • OpenJDK 8-hoz Ubuntu 18.04 x64.
  • Eclipse IDE 2019-03 (4.11.0) x64 Java Fejlesztés a Ubuntu.
  • Gson 2.8.5.

Step 1) Projekt létrehozása.
Újat csinálni Java projektet.

Újat csinálni Java Project.

Step 2) Projekt nevének beállítása.
Állítsa be a projekt nevét erre: XmlToJsonPélda.

Állítsa be a projekt nevét

Step 3) Hozzon létre egy mappát.
Hozd létre a mappát adatbemenet amely két fájlt tartalmaz minta.xml és a sample.json.

Mappaadatok létrehozása

Először definiáljuk az XML-t a következővel: osztály, szerepés person tulajdonságait.

Az általános architektúra a következő: egy osztálynak sok szerepköre van, és egy szerepkörnek sok személye. Az alábbi ábra ezeket a kapcsolatokat mutatja.

Tárgykapcsolatok

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
	<department>
		<roles>
			<role id="1">
				<position>head</position>
				<salary>10k</salary>
			</role>
			<role id="2">
				<position>manager</position>
				<salary>8k</salary>
			</role>
			<role id="3">
				<position>employee</position>
				<salary>5k</salary>
			</role>
		</roles>
		<persons>
			<person id="1">
				<name>Red</name>
				<role>1</role>
			</person>
			<person id="2">
				<name>Green</name>
				<role>2</role>
			</person>
			<person id="3">
				<name>Blue</name>
				<role>2</role>
			</person>
			<person id="4">
				<name>Yellow</name>
				<role>3</role>
			</person>
			<person id="5">
				<name>Brown</name>
				<role>3</role>
			</person>
		</persons>
	</department>
</root>

Másodszor, definiáljuk a JSON-t, amely ugyanezt az elképzelést fejezi ki. Figyeljük meg, hogy a lapos személylista beágyazott tömbbé válik minden szerepkörön belül, ami pontosan az a transzformáció, amelyet a konverziós kód végrehajt.

{
	"roles": [
		{
			"id": "1",
			"position": "head",
			"salary": "10k",
			"persons": [
				{
					"id": "1",
					"name": "Red"
				}
			]
		},
		{
			"id": "2",
			"position": "manager",
			"salary": "8k",
			"persons": [
				{
					"id": "2",
					"name": "Green"
				},
				{
					"id": "3",
					"name": "Blue"
				}
			]
		},
		{
			"id": "3",
			"position": "employee",
			"salary": "5k",
			"persons": [
				{
					"id": "4",
					"name": "Yellow"
				},
				{
					"id": "5",
					"name": "Brown"
				}
			]
		}
	]
}

Step 4) Objektumok definiálása.
Definiálja a csomagban található megfelelő objektumosztályokat modell.

Határozza meg az objektumosztályokat

Role.java

@XmlRootElement(name = "role")
public class Role {
	private String id;
	private String position;
	private String salary;
	public Role() {
		super();
	}
	public Role(String id, String position, String salary) {
		super();
		this.id = id;
		this.position = position;
		this.salary = salary;
	}
	@XmlAttribute(name = "id")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@XmlElement(name = "position")
	public String getPosition() {
		return position;
	}
	public void setPosition(String position) {
		this.position = position;
	}
	@XmlElement(name = "salary")
	public String getSalary() {
		return salary;
	}
	public void setSalary(String salary) {
		this.salary = salary;
	}
}

Person.java

@XmlRootElement(name = "person")
public class Person {
	private String id;
	private String name;
	private String role;
	public Person() {
		super();
	}
	public Person(String id, String name, String role) {
		super();
		this.id = id;
		this.name = name;
		this.role = role;
	}
	@XmlAttribute(name = "id")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@XmlElement(name = "name")
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	@XmlElement(name = "role")
	public String getRole() {
		return role;
	}
	public void setRole(String role) {
		this.role = role;
	}
}

Osztály.java

@XmlRootElement(name = "department")
public class Department {
	private List<Role> roles;
	private List<Person> persons;
	public Department() {
		super();
	}
	public Department(List<Role> roles, List<Person> persons) {
		super();
		this.roles = roles;
		this.persons = persons;
	}
	@XmlElementWrapper(name = "roles")
	@XmlElement(name = "role")
	public List<Role> getRoles() {
		return roles;
	}
	public void setRoles(List<Role> roles) {
		this.roles = roles;
	}
	@XmlElementWrapper(name = "persons")
	@XmlElement(name = "person")
	public List<Person> getPersons() {
		return persons;
	}
	public void setPersons(List<Person> persons) {
		this.persons = persons;
	}
}

XMLModel.java

@XmlRootElement(name = "root")
public class XMLModel {

	private Department department;

	public XMLModel() {
		super();
	}

	public XMLModel(Department department) {
		super();
		this.department = department;
	}

	@XmlElement(name = "department")
	public Department getDepartment() {
		return department;
	}

	public void setDepartment(Department department) {
		this.department = department;
	}

}

Step 5) Állítsa be a könyvtárat.
Adja hozzá és állítsa be a Gson 2.8.5 könyvtárat a Java Építsd meg az útvonalat.

Állítsa be a Gson könyvtárat

Adja hozzá a Gson 2.8.5 könyvtárat Java Építsd meg az útvonalat

Ha a projekt felhasználja Maven A manuálisan hozzáadott jar fájl helyett ugyanazok a függvénykönyvtárak vannak függőségekként deklarálva. A 2.8.5-ös verzió itt van rögzítve a képernyőképekhez igazodva, és minden későbbi Gson-kiadás azonosan működik ebben a példában:

<dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>

    <!-- required on Java 11 and later -->
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
    </dependency>
</dependencies>

Konvertálja az XML-üzenetet Java objektumok JAXB használatával

Először is definiáljuk a csomagban található teljesítő osztályokat. szolgáltatás.

Határozza meg a teljesítő osztályokat

Az első folyamat első lépésében a JAXB szétválasztási technikáját alkalmazzuk.

Az un-marshalling lehetővé teszi a kliensalkalmazások számára, hogy XML adatokat JAXB-ből származó formátumba konvertáljanak. Java tárgyakat.

Definiáljuk a függvényt getObjectFromXmlFile hogy az XML fájlunkat visszaállítsuk egy Java objektum. Ez a függvény az osztályban van definiálva. XMLService.

public XMLModel getObjectFromXmlFile(String filePath) {
	try {
		File file = new File(filePath);
		JAXBContext jaxbContext = JAXBContext.newInstance(XMLModel.class);

		Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
		XMLModel root = (XMLModel) jaxbUnmarshaller.unmarshal(file);

		return root;
	} catch (JAXBException e) {
		e.printStackTrace();
		return null;
	}
}

A fenti kódot az osztályban hívjuk meg. XmlToJsonService.

XMLService xmlService = new XMLService();
XMLModel xmlModel = xmlService.getObjectFromXmlFile(filePathIn);

Department department = xmlModel.getDepartment();
List<Role> roles = department.getRoles();
List<Person> persons = department.getPersons();

Ezen a ponton az XML fájl három részből áll. Java objektumok a memóriában. A következő lépés JSON formátumban írja ki őket.

Megtérít Java objektumok a JSON-üzenethez a Gson használatával

Ebben a lépésben definiáljuk a függvényt writeDataToJsonFile adatok JSON fájlba írásához. Ez a függvény a következő osztályban van definiálva: JsonService.

Megjegyzendő, hogy JSON objektumok listájának írásához a következő függvényeket használjuk: beginArray() és a endArray()E két hívás között írjuk meg az egyes JSON objektumokat.

public void writeDataToJsonFile(String filePath, List<Role> roles, List<Person> persons) {
	try {
		JsonWriter writer = new JsonWriter(new FileWriter(filePath));
		writer.setIndent("    ");
		writer.beginObject();
		writer.name("roles");
		writer.beginArray();
		for (Role role : roles) {
			writer.beginObject();
			writer.name("id").value(role.getId());
			writer.name("position").value(role.getPosition());
			writer.name("salary").value(role.getSalary());
			writer.name("persons");
			writer.beginArray();
			for (Person person : persons) {
				if (person.getRole().equalsIgnoreCase(role.getId())) {
					writer.beginObject();
					writer.name("id").value(person.getId());
					writer.name("name").value(person.getName());
					writer.endObject();
				}
			}
			writer.endArray();
			writer.endObject();
		}
		writer.endArray();
		writer.endObject();
		writer.close();
	} catch (IOException e) {
	}
}

A fenti kódot az osztályban hívjuk meg. XmlToJsonService.

JsonService jsonService = new JsonService();
jsonService.writeDataToJsonFile(filePathOut, roles, persons);

Ez az első folyamat. A belső ciklus minden személyt összevet az aktuális szerepkör-azonosítóval, így válik a sima XML személylista beágyazott JSON tömbbé.

JSON-üzenet konvertálása erre: Java objektumok a Gson segítségével

A második folyamat első lépésében definiáljuk a függvényt getDataFromJsonFile JSON fájlból adatokat olvas be. Ez a függvény a következő osztályban van definiálva: JsonService.

Megjegyzendő, hogy JSON objektumok listájának beolvasásához a következő függvényeket használjuk: beginArray() és a endArray()E két hívás között beolvassuk az egyes JSON objektumokat.

public void getDataFromJsonFile(String filePath, List<Role> roles, List<Person> persons) {
	try {
		JsonReader reader = new JsonReader(new FileReader(filePath));
		reader.beginObject();
		while (reader.hasNext()) {
			String nameRoot = reader.nextName();
			if (nameRoot.equals("roles")) {
				reader.beginArray();
				while (reader.hasNext()) {
					reader.beginObject();
					Role role = new Role();
					while (reader.hasNext()) {
						String nameRole = reader.nextName();
						if (nameRole.equals("id")) {
							role.setId(reader.nextString());
						} else if (nameRole.equals("position")) {
							role.setPosition(reader.nextString());
						} else if (nameRole.equals("salary")) {
							role.setSalary(reader.nextString());
						} else if (nameRole.equals("persons")) {
							reader.beginArray();
							while (reader.hasNext()) {
								reader.beginObject();

								Person person = new Person();
								person.setRole(role.getId());

								while (reader.hasNext()) {
									String namePerson = reader.nextName();
									if (namePerson.equals("id")) {
										person.setId(reader.nextString());
									} else if (namePerson.equals("name")) {
										person.setName(reader.nextString());
									}
								}
								persons.add(person);
								reader.endObject();
							}
							reader.endArray();
						}
					}
					roles.add(role);
					reader.endObject();
				}
				reader.endArray();
			}
		}
		reader.endObject();
		reader.close();
	} catch (IOException e) {

	}
}

A fenti kódot az osztályban hívjuk meg. XmlToJsonService.

JsonService jsonService = new JsonService();
List<Role> roles = new ArrayList<>();
List<Person> persons = new ArrayList<>();

jsonService.getDataFromJsonFile(filePathIn, roles, persons);

Megtérít Java objektumok XML-üzenetbe a JAXB használatával

Ebben a lépésben a JAXB rendező technikáját alkalmazzuk.

A Marshalling lehetővé teszi a kliensalkalmazások számára, hogy JAXB-ből származó adatokat konvertáljanak Java objektumfát XML adatokká.

Definiáljuk a függvényt parseObjectToXml hogy felvonultassa Java objektum egy XML üzenethez. Ez a függvény az osztályban van definiálva. XMLService.

public void parseObjectToXml(String filePath, XMLModel xmlModel) {
	try {
		JAXBContext contextObj = JAXBContext.newInstance(XMLModel.class);

		Marshaller marshallerObj = contextObj.createMarshaller();
		marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

		marshallerObj.marshal(xmlModel, new FileOutputStream(filePath));
	} catch (JAXBException je) {
		System.out.println("JAXBException");
	} catch (IOException ie) {
		System.out.println("IOException");
	}
}

A fenti kódot az osztályban hívjuk meg. XmlToJsonService.

XMLService xmlService = new XMLService();
XMLModel xmlModel = new XMLModel();

Department department = new Department();
department.setRoles(roles);
department.setPersons(persons);

xmlModel.setDepartment(department);

xmlService.parseObjectToXml(filePathOut, xmlModel);

Ez a második folyamat. A létrehozott fájl megegyezik az eredeti sample.xml fájllal, ami megerősíti, hogy az oda-vissza út minden értéket megőrizett.

Hogyan konvertáljunk JSON-t XML-be? Java modell osztály nélkül?

A fenti megközelítés a helyes választás, ha a struktúra ismert és stabil, mivel az annotált osztályok dokumentálják a kontrasztot.tract. Ha a szerkezet ismeretlen vagy gyakran változik, egy generikus konverter gyorsabb.

Az org.json A könyvtár két sorban, modellosztály nélkül végzi el a konverziót:

import org.json.JSONObject;
import org.json.XML;

public class QuickConverter {

    public static void main(String[] args) {
        String str = "{\"username\":\"guru99user\",\"email\":\"guru99user@mail.com\"}";

        JSONObject json = new JSONObject(str);
        String xml = XML.toString(json);

        System.out.println(xml);
    }
}

output:

<username>guru99user</username><email>guru99user@mail.com</email>

Megjegyzendő, hogy az általános útvonal nem hoz létre gyökérelemet és attribútumokat, tehát XML.toString(json, "root") általában szükséges. Az alábbi táblázat egymás mellett mutatja be a két megközelítést.

Kritérium Gson JAXB-vel org.json általános konverzió
Szükséges modellosztályok Igen Nem
A szerkezet feletti ellenőrzés Teljes, beleértve az attribútumokat is Korlátozott, csak elemek
Reshaping Az információk szétdarabolódása Lehetséges, ahogy a beágyazott személyeknél látható Nem lehetséges
A kód sorai Sok Kettő
A legjobb Stabil, dokumentált sémák Eseti vagy ismeretlen struktúrák

A JAXB XML adatokat olvas, a Gson pedig JSON-ba írja, a fordított útvonal pedig Gson-t használ az olvasáshoz. JSON adatokat, miközben a JAXB visszaírja azokat XML-be. További információkért tekintse át XML alapok, a tágabb Java oktatóiés JasperReports, amely mindkét formátumot jelentésadat-forrásként használja.

GYIK

A JAXB-t eltávolították a JDK-ból Java 11. Adja hozzá a jakarta.xml.bind API-t egy futtatókörnyezettel, például a jaxb-runtime-mal együtt, és frissítse a javax-ból jakarta-ba történő importálásokat.

Nem. A Gson csak a JSON-t kezeli. Az XML-nek először Java objektumokat JAXB-n, vagy egy másik elemzőn, például a Jackson XML-en keresztül, mielőtt a Gson szerializálni tudná azokat.

Az XmlElement egy gyermekcímkét hoz létre, amely az értéket tartalmazza, míg az XmlAttribute az értéket a szülő nyitó címkéjébe helyezi. Az attribútumok nem tartalmazhatnak beágyazott struktúrákat.

A streamelés alacsonyan tartja a memóriahasználatot, és lehetővé teszi, hogy a kimeneti struktúra eltérjen a bemeneti osztályoktól, ami pontosan az, ami akkor történik, amikor a személyek szerepkörökbe ágyazódnak.

Igen, egy minta XML dokumentumból. Ellenőrizze a gyűjtemények csomagolási annotációit, mert a generált osztályok gyakran kihagyják az XmlElementWrapper elemet, és lapított struktúrát hoznak létre.

A JSON és annak sorokkal elválasztott változata dominál, mivel közvetlenül a következőre képeződik le: Python szótárakat és hatékony adatfolyamot biztosítanak. Az XML továbbra is megjelenik ott, ahol a régi vállalati rendszerek biztosítják a forrásadatokat.

Foglald össze ezt a bejegyzést a következőképpen: