Pretvorite JSON u XML Java koristeći Gson i JAXB s primjerom
Što je JSON?
JSON je skraćenica za Javascript Object Notation, što je oblik podataka koji slijedi određeno pravilo da je većina programskih jezika trenutno čitljiva. Možemo ga jednostavno spremiti u datoteku ili zapis u bazi podataka. Format JSON koristi parove ključ-vrijednost za opisivanje podataka.
Slijedeći primjer, definiramo JSON niz koji pohranjuje osobne podatke:
{
"username" : "guru99user",
"email" : "guru99user@mail.com"
}
Dakle, sintaksa JSON-a je vrlo jednostavna. Svaka podatkovna informacija će imati dva dijela: ključ i vrijednost koji odgovaraju nazivu polja i njegovoj vrijednosti u određenom zapisu. Ali ako pogledamo dalje, postoji nekoliko stvari poput ovih:
- JSON niz je omeđen vitičastim zagradama {}.
- Ključevi i vrijednosti JSON-a moraju biti u navodnicima {“}.
- Ako postoji više podataka (više parova ključ => vrijednost), za odvajanje koristimo zareze (,).
- JSON ključevi trebaju biti nepotpisana slova ili brojevi, _, bez razmaka, prvi znak ne smije biti postavljen na brojeve.
Što je XML?
XML je kratica za eXtensible Markup Language koji se također naziva i proširivi označni jezik koji je predložio World Wide Web Consortium (https://www.w3.org/) za stvaranje drugih jezika za označavanje. Ovo je jednostavan podskup koji može opisati mnoge različite vrste podataka, tako da je vrlo koristan u dijeljenju podataka između sustava.
Oznake u XML-u često nisu unaprijed definirane, već se stvaraju prema korisničkim konvencijama. XML uvodi nove značajke temeljene na prednostima HTML-a.
Postoje još neke korisne značajke za izradu XML-a u različitim sustavima i rješenjima:
- XML je proširiv: XML vam omogućuje stvaranje vlastitih prilagođenih oznaka koje odgovaraju vašoj aplikaciji.
- XML prenosi podatke, a ne prikazuje ih: XML vam omogućuje pohranu podataka bez obzira na to kako će biti prikazani.
- XML je uobičajeni standard: XML je razvio World Wide Web Consortium (W3C) i dostupan je kao otvoreni standard.
XML je izgrađen na strukturi ugniježđenog čvora. Svaki čvor će imati početnu oznaku i završnu oznaku kako slijedi:
<node>content</node>
U kojem:
- je otvorena oznaka, naziv ove oznake definirate vi.
- je zatvorena oznaka, naziv ove oznake mora odgovarati nazivu otvorene oznake.
- sadržaj je sadržaj ove oznake.
Na vrhu svake XML datoteke morate deklarirati oznaku koja označava verziju XML-a koja se koristi. Sintaksa oznake s uputama:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Što je Gson?
Gson (https://github.com/google/gson) je java biblioteka koja korisnicima omogućuje pretvaranje iz a Java objekt u JSON niz i također pretvoriti iz JSON niza u Java objekt. Gson može raditi s proizvoljnim Java objekte uključujući postojeće objekte bez da imate njihov izvorni kod.
Od verzije 1.6, Gson uvodi dvije nove klase – JsonReader i jsonWriter za pružanje strujanja obrade JSON podataka.
- jsonWriter – Strujanje pisanja u JSON. Sintaksa za opću implementaciju je sljedeća. Mi stvaramo a jsonWriter objekt. Za početak i završetak stvaranja JSON niza koristimo funkciju početniObjekt() i endObject(). Usred izvršavanja ove dvije funkcije vršimo upisivanje podataka s parovima (ključ => vrijednost).
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.endObject();
- JsonReader – Strujanje čitanja iz JSON-a. Sintaksa za opću implementaciju je sljedeća. Stvaramo objekt JsonReader. Za početak i završetak stvaranja JSON niza koristimo funkciju beginObject() i endObject(). Usred izvršavanja ove dvije funkcije izvodimo čitanje podataka s parovima (ključ => vrijednost).
JsonReader reader = new JsonReader();
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("key")) {
String value = reader.nextString();
}
}
reader.endObject();
Gson strujanje je brzo. Međutim, trebate rukovati svakim parom (ključ => vrijednost) obrade JSON podataka.
Što je JAXB?
JAXB je kratica za Java Architecture za XML Binding, koja je biblioteka koja koristi komentare za pretvorbu Java objekata u XML sadržaj i obrnuto. Budući da je JAXB definiran putem specifikacije, možemo koristiti različite implementacije za ovaj standard.
S JAXB-om često koristimo sljedeće osnovne bilješke, naime:
- @XmlRootElement: Ova napomena specificira što je najudaljenija oznaka XML datoteke i stoga je deklarirana na vrhu klase.
- @XmlElementWrapper: Ova napomena stvara omotni XML element oko zbirki.
- @XmlElement: Ova napomena koja se koristi za deklariranje atributa objekta je oznaka XML datoteke.
- @XmlAttribute: Ova napomena koja se također koristi za deklariranje atributa objekta je oznaka XML datoteke.
Sintaksa za opću implementaciju je sljedeća. Prvo ćemo inicijalizirati JAXBContekst objekt s MyObject objekt pretvoriti.
JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class);
U ovom JAXBContekst objekt, ima metodu za stvaranje objekta koji pretvara XML sadržaj u a Java objekt, Unmarshaller.
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
U ovom JAXBContekst objekt, ima metodu za stvaranje objekta koji pretvara Java objekt na XML sadržaj koji je Marshaller.
Marshaller marshallerObj = jaxbContext.createMarshaller();
Kako pretvoriti XML u JSON?
Implementiramo primjer konverzije XML u JSON na platformi:
- Otvorite JDK 8 za Ubuntu 18.04 x64.
- Eclipse IDE 2019-03 (4.11.0) x64 Java Razvoj za Ubuntu.
- Gson 2.8.5.
Korak 1) Izradi projekt.
Napravite novu Java Projekt.

Korak 2) Postavite naziv projekta.
Postavite naziv projekta je XmlToJsonExample.
Korak 3) Stvorite mapu.
Izradi mapu podatak/unos koji sadrži dvije datoteke uzorak.xml i uzorak.json.
Najprije definirajmo naš XML s odjel, Uloga i osoba svojstva.
Opća arhitektura je: ; .
<?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>
Drugo, definiramo JSON s istom idejom:
{
"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"
}
]
}
]
}
Korak 4) Definirajte objekt.
Definirajte odgovarajuće klase objekata u paketu model.
- 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;
}
}
- Osoba.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;
}
}
Korak 5) Postavite knjižnicu.
Dodajte i postavite biblioteku Gson 2.8.5 u Java Put izgradnje.
Pretvori XML poruku u Java objekata koji koriste JAXB
Prvo, definiramo izvođenje klasificirano u paketu usluga.
U prvom koraku prvog procesa koristimo tehniku Un-marshalling JAXB-a.
Un-marshalling pruža klijentskoj aplikaciji mogućnost pretvaranja XML podataka u JAXB izvedene Java objekata.
Definiramo funkciju getObjectFromXmlFile da poništimo maršaliranje naše XML datoteke natrag u a Java objekt. Ova je funkcija definirana u klasi 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;
}
}
Gornji kod zovemo u razredu XmlToJsonService.
XMLService xmlService = new XMLService(); XMLModel xmlModel = xmlService.getObjectFromXmlFile(filePathIn); Department department = xmlModel.getDepartment(); List<Role> roles = department.getRoles(); List<Person> persons = department.getPersons();
Zatim idemo na sljedeći korak.
pretvoriti Java objekte u JSON poruku koristeći Gson
U ovom koraku definiramo funkciju writeDataToJsonFile za pisanje podataka u JSON datoteku. Ova je funkcija definirana u klasi JsonService.
Imajte na umu da za pisanje popisa JSON nizova koristimo funkciju početni niz() i endArray(). Između ove dvije funkcije pišemo svaki JSON niz.
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) {
}
}
Gornji kod nazivamo u razredu XmlToJsonService.
JsonService jsonService = new JsonService(); jsonService.writeDataToJsonFile(filePathOut, roles, persons);
To je prvi proces.
Pretvori JSON poruku u Java objekata koristeći Gson
U prvom koraku drugog procesa definiramo funkciju getDataFromJsonFile za čitanje podataka iz JSON datoteke. Ova je funkcija definirana u klasi JsonService.
Imajte na umu da za čitanje popisa JSON nizova koristimo funkciju početni niz() i endArray(). Između ove dvije funkcije čitamo svaki JSON niz.
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) {
}
}
Gornji kod nazivamo u razredu XmlToJsonService.
JsonService jsonService = new JsonService(); List<Role> roles = new ArrayList<>(); List<Person> persons = new ArrayList<>(); jsonService.getDataFromJsonFile(filePathIn, roles, persons);
Kako pretvoriti Json u XML Java?
JSON u XML in Java pretvara se pomoću JSONObject json = new JSONObject(str); Niz xml = XML. Ako imate važeću dtd datoteku ili xml datoteku, vrlo je jednostavno transformirati json u xml i također xml u json.
Zatim idemo na sljedeći korak.
pretvoriti Java objekata u XML poruku koristeći JAXB
U ovom koraku koristimo tehniku Marshalling of JAXB.
Marshalling omogućuje klijentskoj aplikaciji mogućnost pretvaranja izvedenog JAXB-a Java stablo objekata u XML podatke.
Definiramo funkciju parseObjectToXm za marshall Java objekt u XML poruku. Ova je funkcija definirana u klasi
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");
}
}
Gornji kod nazivamo u razredu 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);
To je drugi proces.
Zaključak
U ovom vodiču ukratko smo naučili jedan način na koji JAXB može čitati XML podatke, a Gson ih pisati u JSON. Naprotiv, vidjeli smo i način na koji je Gson čitao JSON data i JAXB ih zapisuju u XML.

