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.

Step 2) Állítsa be a projekt nevét.
A projektnév beállítása XmlToJsonPélda.
Step 3) Hozzon létre egy mappát.
Mappa létrehozása adatbemenet két fájlt tartalmaz minta.xml és a sample.json.
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ő: ; .
<?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.
- 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.
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.
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.

