Convertir JSON a XML Java usando Gson y JAXB con ejemplo

ยฟQuรฉ es el JSON?

JSON es una abreviatura de Javascript Notaciรณn de objetos, que es una forma de datos que sigue una determinada regla que la mayorรญa de los lenguajes de programaciรณn actuales pueden leer. Podemos guardarlo fรกcilmente en un archivo o registro en la base de datos. El formato JSON utiliza pares clave-valor para describir los datos.

Siguiendo el ejemplo, definimos una cadena JSON que almacena informaciรณn personal:

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

Entonces la sintaxis de JSON es muy simple. Cada informaciรณn de datos tendrรก dos partes: clave y valor que corresponden al nombre del campo y su valor en un determinado registro. Pero si miramos mรกs a fondo, hay algunas cosas como esta:

  • La cadena JSON estรก encerrada entre llaves {}.
  • Las claves y valores de JSON deben estar entre comillas {โ€œ}.
  • Si hay mรกs datos (mรกs pares clave => valor), usamos comas (,) para separar.
  • Las claves JSON deben consistir en letras o nรบmeros sin signo, _, y sin espacios; el primer carรกcter no debe ser un nรบmero.

ยฟQuรฉ es XML?

XML significa eXtensible Markup Language, tambiรฉn llamado lenguaje de marcado extensible propuesto por el World Wide Web Consortium (https://www.w3.org/) para crear otros lenguajes de marcado. Este es un subconjunto simple que puede describir muchos tipos diferentes de datos, por lo que es muy รบtil para compartir datos entre sistemas.

Las etiquetas en XML a menudo no estรกn predefinidas, pero se crean segรบn las convenciones del usuario. XML introduce nuevas caracterรญsticas basadas en las ventajas del HTML.

Hay algunas funciones de creaciรณn de XML mรกs รบtiles en diversos sistemas y soluciones:

  • XML es extensible: XML le permite crear sus propias etiquetas personalizadas para adaptarse a su aplicaciรณn.
  • XML transporta datos, no los muestra: XML le permite almacenar datos independientemente de cรณmo se mostrarรกn.
  • XML es un estรกndar comรบn: XML fue desarrollado por el World Wide Web Consortium (W3C) y estรก disponible como estรกndar abierto.

XML se basa en una estructura de nodos anidados. Cada nodo tendrรก una etiqueta de apertura y una etiqueta de cierre de la siguiente manera:

<node>content</node>

En el cual:

  • es una etiqueta abierta, el nombre de esta etiqueta lo define usted.
  • es una etiqueta cerrada, el nombre de esta etiqueta debe coincidir con el nombre de la etiqueta abierta.
  • contenido es el contenido de esta etiqueta.

En la parte superior de cada archivo XML debe declarar una etiqueta para indicar la versiรณn XML que estรก en uso. La sintaxis de la etiqueta de instrucciรณn:

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

ยฟQuรฉ es Gson?

gson (https://github.com/google/gson) es una biblioteca de Java que permite a los usuarios convertir desde un Java objeto a cadena JSON y tambiรฉn convertir de una cadena JSON a Java objeto. Gson puede trabajar con arbitrario Java objetos, incluidos objetos existentes sin que usted tenga su cรณdigo fuente.

Desde la versiรณn 1.6, Gson introduce dos nuevas clases: JsonReader y el JsonEscritor para proporcionar procesamiento de streaming en datos JSON.

  • JsonEscritor โ€“ Streaming de escritura en JSON. La sintaxis para la implementaciรณn general es la siguiente. Creamos un JsonEscritor objeto. Para comenzar y terminar de crear una cadena JSON, usamos la funciรณn comenzarObjeto() y el objeto final(). En medio de la ejecuciรณn de estas dos funciones, realizamos la escritura de datos con pares (clave => valor).
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.endObject();
  • JsonReader โ€“ Lectura en streaming desde JSON. La sintaxis para la implementaciรณn general es la siguiente. Creamos un objeto JsonReader. Para comenzar y terminar de crear una cadena JSON, usamos las funciones beginObject() y endObject(). En medio de la ejecuciรณn de estas dos funciones, realizamos la lectura de datos con pares (clave => valor).
JsonReader reader = new JsonReader();
reader.beginObject();
while (reader.hasNext()) {
	String name = reader.nextName();
	if (name.equals("key")) {
		String value = reader.nextString();
	}
}
reader.endObject();

El procesamiento de transmisiรณn de Gson es rรกpido. Sin embargo, debe manejar cada par (clave => valor) de procesamiento de datos JSON.

ยฟQuรฉ es JAXB?

JAXB significa Java Architecnologรญa para XML Binding, que es una biblioteca que utiliza anotaciones para convertir Java objetos a contenido XML y viceversa. Como JAXB se define mediante una especificaciรณn, podemos utilizar diferentes implementaciones para este estรกndar.

Con JAXB, a menudo utilizamos las siguientes anotaciones bรกsicas, a saber:

  • @XmlRootElement: Esta anotaciรณn especifica cuรกl es la etiqueta mรกs externa del archivo XML y, por lo tanto, se declara encima de una clase.
  • @XmlElementWrapper: Esta anotaciรณn crea un elemento XML contenedor alrededor de las colecciones.
  • @XmlElement: Esta anotaciรณn utilizada para declarar un atributo del objeto es una etiqueta del archivo XML.
  • @AtributoXml: Esta anotaciรณn tambiรฉn se utiliza para declarar un atributo del objeto que es una etiqueta del archivo XML.

La sintaxis para la implementaciรณn general es la siguiente. Primero, inicializaremos el JAXBContexto objeto con el Myobject objeto a convertir.

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

En este JAXBContexto objeto, tiene un mรฉtodo para crear un objeto que convierte el contenido XML en un Java objeto, desarmador.

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

En este JAXBContexto objeto, tiene un mรฉtodo para crear el objeto que convierte el Java oponerse al contenido XML que es Mariscal.

Marshaller marshallerObj = jaxbContext.createMarshaller();

ยฟCรณmo convertir XML a JSON?

Implementamos el ejemplo de conversiรณn XML โ€“ JSON en la plataforma:

  • Abra JDK 8 para Ubuntu 18.04 x64.
  • Eclipse IDE 2019-03 (4.11.0) x64 Java Desarrollo para Ubuntu.
  • Hijo 2.8.5.

Paso 1) Crear proyecto.
Crear un nuevo Java Proyecto.

Crear un nuevo Java Proyecto.
Crear un nuevo Java Proyecto.

Paso 2) Establecer el nombre del proyecto.
Establecer el nombre del proyecto es XmlToJsonEjemplo.

Establecer nombre del proyecto

Establecer el nombre del proyecto.

Paso 3) Crea una carpeta.
crear una carpeta Entrada de datos que contiene dos archivos muestra.xml y el muestra.json.

Crear datos de carpeta

Crear carpeta de datos/entrada.

Primero definamos nuestro XML con de facturaciรณn, papel y el persona propiedades.

La arquitectura general es: ; .

Relaciones de objetos

Relaciones objetales.

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

En segundo lugar, definimos JSON con la misma idea:

{
	"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"
				}
			]
		}
	]	
}

Paso 4) Definir objeto.
Definir las clases de objetos correspondientes en el paquete. modelo.

Definir clases de objetos

Definir clases de objetos.

  • Rol.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;
	}
}
  • Persona.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;
	}
}
  • Departamento.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;
	}

}

Paso 5) Configurar biblioteca.
Agregar y configurar la biblioteca Gson 2.8.5 en Java Construir camino.

Configurar biblioteca Gson

Agregue la biblioteca Gson 2.8.5 a Java Construir camino

Agregue la biblioteca Gson 2.8.5 a Java Construir camino.

Convertir mensaje XML a Java objetos usando JAXB

En primer lugar, definimos realizar clasificado en paquete. TRANSPORTE GRATUITO.

Definir clases de actuaciรณn

Definir clases escรฉnicas.

En el primer paso del primer proceso, utilizamos la tรฉcnica Un-marshalling de JAXB.

Un-marshalling proporciona a una aplicaciรณn cliente la capacidad de convertir datos XML en datos derivados de JAXB. Java objetos.

Definimos funciรณn obtenerObjetoDeArchivoXml para descomponer nuestro archivo XML en un Java objeto. Esta funciรณn estรก definida en la clase. Servicio XML.

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;
	}
}

Llamamos al cรณdigo anterior en clase. Servicio XmlToJson.

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

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

Luego pasamos al siguiente paso.

Convertir Java objetos al mensaje JSON usando Gson

En este paso definimos la funciรณn escribirDataToJsonFile para escribir datos en el archivo JSON. Esta funciรณn estรก definida en la clase. Servicio Json.

Tenga en cuenta que para escribir una lista de cadenas JSON, usamos la funciรณn comenzarmatriz() y el matriz final(). Entre estas dos funciones, escribimos cada cadena JSON.

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) {
	}
}

Llamamos al cรณdigo anterior en clase. Servicio XmlToJson.

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

Ese es el primer proceso.

Convertir mensaje JSON a Java objetos usando Gson

En el primer paso del segundo proceso, definimos la funciรณn obtener datos de archivo Json para leer datos del archivo JSON. Esta funciรณn estรก definida en la clase. Servicio Json.

Tenga en cuenta que para leer una lista de cadenas JSON, usamos la funciรณn comenzarmatriz() y el matriz final(). Entre estas dos funciones, leemos cada cadena JSON.

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) {

	}
}

Llamamos al cรณdigo anterior en clase. Servicio XmlToJson.

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

jsonService.getDataFromJsonFile(filePathIn, roles, persons);

Cรณmo convertir Json a XML Java?

JSON a XML in JAVA se convierte usando JSONObject json = new JSONObject(str); Cadena xml = XML. Si tiene un archivo dtd vรกlido o un archivo xml, entonces es muy fรกcil transformar json a xml y tambiรฉn xml a json.

Luego pasamos al siguiente paso.

Convertir Java objetos al mensaje XML usando JAXB

En este paso utilizamos la tรฉcnica Marshalling de JAXB.

Marshalling proporciona a una aplicaciรณn cliente la capacidad de convertir un JAXB derivado Java รกrbol de objetos en datos XML.

Definimos la funciรณn parseObjectToXm para marshall Java objeto al mensaje XML. Esta funciรณn estรก definida en la clase.

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");
	}
}

Llamamos al cรณdigo anterior en clase. Servicio XmlToJson.

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);

Ese es el segundo proceso.

Conclusiรณn

En este tutorial, aprendimos brevemente una forma en que JAXB puede leer datos XML y Gson los escribe en JSON. Por el contrario, tambiรฉn vimos la forma en que Gson leyรณ JSON datos y JAXB los escriben en XML.

Resumir este post con: