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.

Napravite novu Java Projekt.
Napravite novu Java Projekt.

Korak 2) Postavite naziv projekta.
Postavite naziv projekta je XmlToJsonExample.

Postavite naziv projekta

Postavite naziv projekta.

Korak 3) Stvorite mapu.
Izradi mapu podatak/unos koji sadrži dvije datoteke uzorak.xml i uzorak.json.

Stvorite podatke mape

Stvorite podatke/unos mape.

Najprije definirajmo naš XML s odjel, Uloga i osoba svojstva.

Opća arhitektura je: ; .

Objektni odnosi

Objektni odnosi.

<?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.

Definirajte klase objekata

Definirajte klase objekata.

  • 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.

Postavite knjižnicu Gson

Dodajte biblioteku Gson 2.8.5 u Java Put izgradnje

Dodajte 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.

Definirajte izvedbene razrede

Definirajte izvedbene razrede.

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.