Convierta JSON a XML Java usando Gson y JAXB con un ejemplo
¿Qué es JSON?
JSON es una abreviatura de Javascript Object Notation, que es una forma de datos que sigue una cierta regla que la mayoría de los lenguajes de programación son legibles actualmente. Podemos guardarlo fácilmente en un archivo o registro en la base de datos. El formato JSON usa pares clave-valor para describir datos.
Siguiendo el ejemplo, definimos una cadena JSON que almacena información personal:
{ "username" : "guru99user", "email" : "[email protected]" }
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 mirando más allá, hay algunas cosas como esta:
- La cadena JSON está entre llaves {}.
- Las claves y los valores de JSON deben ir entre comillas {“}.
- Si hay más datos (más claves => pares de valores), usamos comas (,) para separarlos.
- Las claves JSON deben ser letras o números sin firmar, _ y sin espacios, el primer carácter no debe establecerse en números.
En este tutorial, aprenderá-
- ¿Qué es JSON?
- ¿Qué es XML?
- ¿Qué es Gson?
- ¿Qué es JAXB?
- ¿Cómo convertir XML a JSON?
- Convertir mensajes XML a objetos Java usando JAXB
- Convierta objetos Java en mensajes JSON usando Gson
- Convertir mensajes JSON en objetos Java usando Gson
- Convierta objetos Java en mensajes XML usando JAXB
¿Qué es XML?
XML significa Lenguaje de marcado extensible, también llamado lenguaje de marcado extensible propuesto por el Consorcio World Wide Web (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 de acuerdo con las convenciones del usuario. XML introduce nuevas características basadas en las ventajas de 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 que:
es una etiqueta abierta, usted define el nombre de esta etiqueta. - 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 se está utilizando. 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 Java que permite a los usuarios convertir un objeto Java a una cadena JSON y también convertir una cadena JSON a un objeto Java. Gson puede trabajar con objetos Java arbitrarios, incluidos objetos existentes sin que usted tenga su código fuente.
Desde la versión 1.6, Gson presenta dos nuevas clases:JsonReader y JsonWriter para proporcionar procesamiento de transmisión en datos JSON.
- JsonWriter – Transmisión de escritura a JSON. La sintaxis para la implementación general es la siguiente. Creamos un JsonWriter objeto. Para comenzar y terminar de crear una cadena JSON, usamos la función beginObject() y endObject()
. 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 – Transmisión de lectura 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 la función 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) del procesamiento de datos JSON.
¿Qué es JAXB?
JAXB significa Java Architecture for XML Binding, que es una biblioteca que utiliza anotaciones para convertir objetos Java en contenido XML y viceversa. Como JAXB se define a través de una especificación, podemos usar diferentes implementaciones para este estándar.
Con JAXB, a menudo usamos 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 en la parte superior de una clase.
- @XmlElementWrapper :esta anotación crea un elemento XML envolvente 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 usa para declarar un atributo del objeto es una etiqueta del archivo XML.
La sintaxis para la implementación general es la siguiente. Primero, inicializaremos el JAXBContext objeto con MyObject objeto a convertir.
JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class);
En este JAXBContext objeto, tiene un método para crear un objeto que convierte el contenido XML en un objeto Java, Unmarshaller .
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
En este JAXBContext objeto, tiene un método para crear el objeto que convierte el objeto Java al contenido XML que es Marshaller .
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 Desarrollo Java para Ubuntu.
- Gson 2.8.5.
Crear un nuevo proyecto Java.
Paso 2 . Establecer el nombre del proyecto.
Establecer el nombre del proyecto es XmlToJsonExample .
Paso 3 . Crear una carpeta.
Crear carpeta datos/entrada que contiene dos archivos sample.xml y muestra.json .
Primero definamos nuestro XML con departamento , rol y persona propiedades.
La arquitectura general es:
<?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 teniendo 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.
Defina las clases de objetos correspondientes en el paquete modelo .
- 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; } }
Modelo XML.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 . Configure la biblioteca.
Agregue y configure la biblioteca Gson 2.8.5 en Java Build Path.
Convertir mensajes XML a objetos Java usando JAXB
En primer lugar, definimos el desempeño clasificado en el paquete servicio .
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 objetos Java derivados de JAXB.
Definimos la función getObjectFromXmlFile para desarmar nuestro archivo XML de vuelta a un objeto Java. Esta función está definida en la clase 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; } }
Llamamos al código anterior en la clase XmlToJsonService .
XMLService xmlService = new XMLService(); XMLModel xmlModel = xmlService.getObjectFromXmlFile(filePathIn); Department department = xmlModel.getDepartment(); List<Role> roles = department.getRoles(); List<Person> persons = department.getPersons();
Luego vamos al siguiente paso.
Convertir objetos Java a mensajes JSON usando Gson
En este paso, definimos la función writeDataToJsonFile para escribir datos en el archivo JSON. Esta función se define en la clase JsonService .
Tenga en cuenta que para escribir una lista de cadenas JSON, usamos la función beginArray() y endArray() . 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 la clase XmlToJsonService .
JsonService jsonService = new JsonService(); jsonService.writeDataToJsonFile(filePathOut, roles, persons);
Ese es el primer proceso.
Convertir mensajes JSON a objetos Java usando Gson
En el primer paso del segundo proceso, definimos la función getDataFromJsonFile para leer datos del archivo JSON. Esta función se define en la clase JsonService .
Tenga en cuenta que para leer una lista de cadenas JSON, usamos la función beginArray() y endArray() . 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 la clase XmlToJsonService .
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 en JAVA se convierte usando JSONObject json =new JSONObject(str); Cadena xml =XML . Si tiene un archivo dtd válido o el archivo xml, entonces es muy fácil transformar json a xml y también xml a json.
Luego vamos al siguiente paso.
Convertir objetos Java a mensajes XML utilizando JAXB
En este paso, utilizamos la técnica Marshalling de JAXB.
Marshalling proporciona a una aplicación cliente la capacidad de convertir un árbol de objetos Java derivado de JAXB en datos XML.
Definimos la función parseObjectToXm para clasificar el objeto Java en un mensaje XML. Esta función se define en 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 la clase 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);
Ese es el segundo proceso.
Conclusión
En este tutorial, aprendimos brevemente una forma en que JAXB puede leer datos XML y Gson escribirlos en JSON. Por el contrario, también vimos la forma en que Gson lee datos JSON y JAXB los escribe en XML.
Java
- Clase y objeto C++ con ejemplo
- Java Hello World:cómo escribir su primer programa Java con un ejemplo
- Encapsulación en Java OOP con ejemplo
- Método String Length () en Java:cómo encontrar con el ejemplo
- Método Java String charAt() con ejemplo
- Método Java String contains() | Comprobar subcadena con ejemplo
- Java String termina con () método con ejemplo
- Java BufferedReader:cómo leer un archivo en Java con un ejemplo
- Series de Fibonacci en Java utilizando el programa Recursion and Loops
- Algoritmo de ordenación por inserción en Java con ejemplo de programa
- Clasificación de selección en el programa Java con ejemplo