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

Mi a JSON?

A JSON a szó rövidítése Javascript Object Notation, amely egy olyan adatforma, amely egy bizonyos szabályt követ, amely szerint a legtöbb programozási nyelv jelenleg olvasható. Könnyen elmenthetjük fájlba vagy rekordba az adatbázisban. A JSON formátum kulcs-érték párokat használ az adatok leírására.

A példát követve definiálunk egy JSON-karakterláncot, amely személyes adatokat tárol:

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

Tehát a JSON szintaxisa nagyon egyszerű. Minden adatinformáció két részből áll: kulcsból és értékből, amelyek megfelelnek a mező nevének és értékének egy bizonyos rekordban. De ha tovább nézzük, van néhány ehhez hasonló dolog:

  • A JSON-karakterláncot kapcsos zárójelek veszik körül {}.
  • A JSON kulcsait és értékeit idézőjelek közé kell tenni {“}.
  • Ha több adat van (több kulcs => értékpár), akkor vesszőt (,) használunk az elválasztáshoz.
  • A JSON-kulcsok előjel nélküli betűk vagy számok, _ karakterek, szóközök nélkül, 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 által javasolt kiterjeszthető jelölőnyelvnek is neveznek (https://www.w3.org/) más jelölőnyelvek létrehozásához. Ez egy egyszerű részhalmaz, amely sok különböző típusú adatot leírhat, ezért nagyon hasznos a rendszerek közötti adatmegosztásban.

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 még néhány hasznos XML-készítési funkció a különféle rendszerekben és megoldásokban:

  • 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 jeleníti meg: az XML lehetővé teszi az adatok tárolását, függetlenül attól, hogy 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óponti struktúrára épül. Minden csomópontnak lesz egy nyitó és egy záró címkéje az alábbiak szerint:

<node>content</node>

Amiben:

  • egy nyitott címke, a címke nevét Ön határozza meg.
  • zárt címke, a címke nevének meg kell egyeznie a nyitott címke nevével.
  • tartalom ez a címke tartalma.

Minden XML-fájl tetején deklarálnia kell egy címkét, amely jelzi, hogy az XML verziója használatban van. Az utasításcímke szintaxisa:

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

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, hogy a Java objektumot JSON-karakterláncra, és konvertálhat JSON-karakterláncból a következőre Java objektum. A Gson tetszőlegesen tud dolgozni Java objektumok, beleértve a meglévő objektumokat anélkül, hogy rendelkezne a forráskódjukkal.

Az 1.6-os verzió óta a Gson két új osztályt vezet be – JsonReader és a JsonWriter a JSON-adatok adatfolyam-feldolgozásának biztosításához.

  • JsonWriter – Streaming írás JSON-ba. Az általános megvalósítás szintaxisa a következő. Létrehozunk a JsonWriter tárgy. A JSON-karakterlánc létrehozásának megkezdéséhez és befejezéséhez a függvényt használjuk beginObject() és a endObject(). E két függvény végrehajtásának közepén páros adatírást végzünk (kulcs => érték).
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.endObject();
  • JsonReader – Streaming olvasás JSON-ból. Az általános megvalósítás szintaxisa a következő. Létrehozunk egy JsonReader objektumot. A JSON-karakterlánc létrehozásának megkezdéséhez és befejezéséhez a beginObject() és az endObject() függvényeket használjuk. E két funkció végrehajtása közben az adatok páros beolvasását végezzük (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 streaming feldolgozása gyors. Azonban a JSON-adatok feldolgozásának minden párját (kulcs => érték) kezelnie kell.

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 objektumokat XML-tartalomra és fordítva. Mivel a JAXB specifikáción keresztül van definiálva, különböző implementációkat használhatunk ehhez a szabványhoz.

A JAXB esetében gyakran használjuk a következő alapvető megjegyzéseket, nevezetesen:

  • @XmlRootElement: Ez a megjegyzés határozza meg, hogy mi az XML-fájl legkülső címkéje, és ezért az osztály tetején van deklarálva.
  • @XmlElementWrapper: Ez a megjegyzés egy burkoló XML elemet hoz létre a gyűjtemények körül.
  • @XmlElement: Ez az objektum attribútumának deklarálására használt annotáció az XML fájl címkéje.
  • @XmlAttribute: Ezt a megjegyzést arra is használják, hogy az objektum attribútumaként deklarálják, hogy az XML-fájl címkéje.

Az általános megvalósítás szintaxisa a következő. Először inicializáljuk a JAXBContextus objektum a MyObject átalakítandó objektum.

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

Ebben JAXBContextus objektum, van egy metódusa olyan objektum létrehozására, amely az XML tartalmat a Java tárgy, Unmarshaller.

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

Ebben JAXBContextus objektum, van egy metódusa az objektum létrehozására, amely átalakítja a Java objektumot az adott XML-tartalomra Marshaller.

Marshaller marshallerObj = jaxbContext.createMarshaller();

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

Az XML – JSON konverzió példáját valósítjuk meg a platformon:

  • Nyissa meg a JDK 8-at 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 Project.

Újat csinálni Java Project.
Újat csinálni Java Project.

Step 2) Állítsa be a projekt nevét.
A projektnév beállítása XmlToJsonPélda.

Állítsa be a projekt nevét

Állítsa be a projekt nevét.

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

Mappaadatok létrehozása

Mappaadatok/bevitel létrehozása.

Először határozzuk meg az XML-ünket ezzel osztály, szerep és a person tulajdonságait.

Az általános építészet a következő: ; .

Tárgykapcsolatok

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, meghatározzuk a JSON-t, amelynek ugyanaz az elképzelése:

{
	"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) Határozza meg az objektumot.
Határozza meg a megfelelő objektumosztályokat a csomagban modell.

Határozza meg az objektumosztályokat

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;
	}
}
  • Department.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.
A Gson 2.8.5 könyvtár hozzáadása és beállítása 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

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

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

Először is definiáljuk a csomagba sorolt ​​teljesítményt szolgáltatás.

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

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

Az első folyamat első lépésében a JAXB Un-marshalling technikáját használjuk.

A rendezetlenség lehetővé teszi az ügyfélalkalmazás számára, hogy az XML-adatokat JAXB-alapúvá konvertálja Java tárgyakat.

Meghatározzuk a funkciót getObjectFromXmlFile az XML-fájlunk visszaállításához a 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 hívjuk az órán XmlToJsonService.

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

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

Ezután megyünk a következő lépésre.

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

Ebben a lépésben meghatározzuk a függvényt writeDataToJsonFile adatok írásához a JSON-fájlba. Ez a függvény az osztályban van definiálva JsonService.

Vegye figyelembe, hogy a JSON-karakterláncok listájának írásához a függvényt használjuk beginArray() és a endArray(). E két függvény közé minden JSON-karakterláncot írunk.

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 hívjuk az órán XmlToJsonService.

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

Ez az első folyamat.

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

A második folyamat első lépésében meghatározzuk a függvényt getDataFromJsonFile adatok olvasásához a JSON-fájlból. Ez a függvény az osztályban van definiálva JsonService.

Vegye figyelembe, hogy a JSON-karakterláncok listájának olvasásához a függvényt használjuk beginArray() és a endArray(). E két függvény között minden JSON-karakterláncot beolvasunk.

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 hívjuk az órán XmlToJsonService.

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

jsonService.getDataFromJsonFile(filePathIn, roles, persons);

Hogyan lehet a Json-t XML-re konvertálni Java?

JSON-ból XML-be in JAVA a JSONObject használatával konvertálódik json = new JSONObject(str); Húr xml = XML. Ha van érvényes dtd fájlja vagy xml fájlja, akkor nagyon könnyű átalakítani a json fájlt xml-re és az xml-t is json-ra.

Ezután megyünk a következő lépésre.

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

Ennél a lépésnél a JAXB Marshalling technikáját használjuk.

A Marshalling biztosítja a kliens alkalmazás számára a JAXB származtatott konvertálásának lehetőségét Java objektumfát XML adatokká.

Meghatározzuk a parseObjectToXm függvényt a marshallhoz Java objektum az XML üzenetre. 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 hívjuk az órán 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.

Összegzés

Ebben az oktatóanyagban röviden megtanultuk, hogyan tudja a JAXB XML-adatokat olvasni, a Gson pedig JSON-ba írhatja azokat. Ellenkezőleg, azt is láttuk, ahogy Gson olvasott JSON adatok és a JAXB XML-be írja.