Converta JSON em XML usando Gson e JAXB: Exemplo de JAVA

O que é JSON?

JSON é uma abreviatura de Javascript Object Notation, que é uma forma de dados que segue uma certa regra de que a maioria das linguagens de programação são atualmente legíveis. Podemos facilmente salvá-lo em um arquivo ou registro no banco de dados. O formato JSON usa pares de valores-chave para descrever os dados.

Seguindo o exemplo, definimos uma string JSON que armazena informações pessoais:

{ 'username' : 'on2vhfuser', 'email' : 'This email address is being protected from spambots. You need JavaScript enabled to view it.' } 

Portanto, a sintaxe do JSON é muito simples. Cada informação de dado terá duas partes: chave e valor que correspondem ao nome do campo e seu valor em um determinado registro. Mas, olhando mais a fundo, existem algumas coisas como estas:

  • A string JSON é delimitada por chaves {}.
  • As chaves e valores de JSON devem ser colocados entre aspas {'}.
  • Se houver mais dados (mais pares chave => valor), usamos vírgulas (,) para separar.
  • As chaves JSON devem ser letras ou números sem sinal, _, e sem espaços, o primeiro caractere não deve ser definido como números.

Neste tutorial, você aprenderá

O que é XML?

XML significa eXtensible Markup Language, também chamada de extensible markup language proposta pelo World Wide Web Consortium ( http://www.w3.org/ ) para criar outras linguagens de marcação. Este é um subconjunto simples que pode descrever muitos tipos diferentes de dados, por isso é muito útil no compartilhamento de dados entre sistemas.

As marcas em XML geralmente não são predefinidas, mas são criadas de acordo com as convenções do usuário. XML apresenta novos recursos com base nas vantagens do HTML.

Existem alguns recursos de criação de XML mais úteis em diversos sistemas e soluções:

  • XML é extensível: XML permite que você crie suas próprias tags personalizadas para se adequar ao seu aplicativo.
  • XML carrega dados, não os exibe: XML permite que você armazene dados independentemente de como eles serão exibidos.
  • XML é um padrão comum: XML foi desenvolvido pelo World Wide Web Consortium (W3C) e está disponível como um padrão aberto.

XML é construído em uma estrutura de nó aninhada. Cada nó terá uma tag de abertura e uma tag de fechamento da seguinte maneira:

 content 

No qual:

  • é uma tag aberta, o nome dessa tag é definido por você.
  • é uma tag fechada, o nome dessa tag deve corresponder ao nome da tag aberta.
  • contente é o conteúdo desta tag.

No início de cada arquivo XML, você deve declarar uma tag para indicar a versão XML em uso. A sintaxe do tag de instrução:

O que é Gson?

Gson ( https://github.com/google/gson ) é uma biblioteca java que permite aos usuários converter de um objeto Java em string JSON e também converter de uma string JSON em objeto Java. Gson pode trabalhar com objetos Java arbitrários, incluindo objetos existentes, sem que você tenha seu código-fonte.

Desde a versão 1.6, Gson apresenta duas novas classes - JsonReader e JsonWriter para fornecer processamento de streaming em dados JSON.

  • JsonWriter - Streaming de gravação em JSON. A sintaxe para implementação geral é a seguinte. Nós criamos um JsonWriter objeto. Para começar e terminar a criação de uma string JSON, usamos a função beginObject () e endObject () . No meio da execução dessas duas funções, executamos a gravação de dados com pares (chave => valor).
JsonWriter writer = new JsonWriter(); writer.beginObject(); writer.name('key').value('value'); writer.endObject(); 
  • JsonReader - Leitura de streaming de JSON. A sintaxe para implementação geral é a seguinte. Criamos um objeto JsonReader. Para começar e terminar a criação de uma string JSON, usamos a função beginObject () e endObject (). No meio da execução dessas duas funções, executamos a leitura de dados com pares (chave => valor).
JsonReader reader = new JsonReader(); reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (name.equals('key')) { String value = reader.nextString(); } } reader.endObject(); 

O processamento de streaming Gson é rápido. No entanto, você precisa lidar com cada par (chave => valor) de processamento de dados JSON.

O que é JAXB?

JAXB significa Java Architecture for XML Binding, que é uma biblioteca que usa anotações para converter objetos Java em conteúdo XML e vice-versa. Como JAXB é definido por meio de uma especificação, podemos usar diferentes implementações para este padrão.

Com JAXB, costumamos usar as seguintes anotações básicas, a saber:

  • @XmlRootElement : Esta anotação especifica qual é a marca externa do arquivo XML e, portanto, é declarada no topo de uma classe.
  • @XmlElementWrapper : Esta anotação cria um elemento XML wrapper em torno das coleções.
  • @XmlElement : Esta anotação usa para declarar que um atributo do objeto é uma tag do arquivo XML.
  • @XmlAttribute : Esta anotação também usada para declarar um atributo do objeto é uma tag do arquivo XML.

A sintaxe para implementação geral é a seguinte. Primeiro, vamos inicializar o JAXBContext objeto com o MyObject objeto para converter.

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

Nisso JAXBContext objeto, ele tem um método para criar um objeto que converte o conteúdo XML em um objeto Java, Unmarshaller .

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

Nisso JAXBContext objeto, ele tem um método para criar o objeto que converte o objeto Java para o conteúdo XML que é Marshaller .

Marshaller marshallerObj = jaxbContext.createMarshaller(); 

Configuração inicial

Implementamos o exemplo de conversão XML - JSON na plataforma:

  • Abra o JDK 8 para Ubuntu 18.04 x64.
  • Eclipse IDE 2019-03 (4.11.0) x64 Java Development para Ubuntu.
  • Gson 2.8.5.

Passo 1 . Crie um novo projeto Java.

Crie um novo projeto Java.



Passo 2 . Definir nome do projeto é XmlToJsonExample .

Defina o nome do projeto.

etapa 3 . Criar pasta dados / entrada contendo dois arquivos sample.xml e sample.json .

Crie dados / entrada de pasta.



Vamos primeiro definir nosso XML com departamento , Função e pessoa propriedades.

A arquitetura geral é:; .

Relações de objeto.

 head 10k manager 8k employee 5k Red 1 Green 2 Blue 2 Yellow 3 Brown 3 

Em segundo lugar, definimos JSON tendo a mesma ideia:

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

Passo 4 . Defina as classes de objetos correspondentes no pacote modelo .

Defina as classes de objetos.

  • 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 roles; private List persons; public Department() { super(); } public Department(List roles, List persons) { super(); this.roles = roles; this.persons = persons; } @XmlElementWrapper(name = 'roles') @XmlElement(name = 'role') public List getRoles() { return roles; } public void setRoles(List roles) { this.roles = roles; } @XmlElementWrapper(name = 'persons') @XmlElement(name = 'person') public List getPersons() { return persons; } public void setPersons(List 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; } } 

Etapa 5 . Configure a biblioteca Gson 2.8.5.

Adicione a biblioteca Gson 2.8.5 ao Java Build Path.

como ler arquivo em c

Converta mensagem XML em objetos Java usando JAXB

Em primeiro lugar, definimos desempenho classificado em pacote serviço .

Defina as classes de desempenho.

Na primeira etapa do primeiro processo, usamos a técnica Un-marshalling de JAXB.

O desempacotamento fornece a um aplicativo cliente a capacidade de converter dados XML em objetos Java derivados de JAXB.

Nós definimos função getObjectFromXmlFile para desempacotar nosso arquivo XML de volta a um objeto Java. Esta função é definida na aula 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; } } 

Chamamos o código acima na aula XmlToJsonService .

XMLService xmlService = new XMLService(); XMLModel xmlModel = xmlService.getObjectFromXmlFile(filePathIn); Department department = xmlModel.getDepartment(); List roles = department.getRoles(); List persons = department.getPersons(); 

Em seguida, vamos para a próxima etapa.

Converta objetos Java em mensagem JSON usando Gson

Nesta etapa, definimos a função writeDataToJsonFile para gravar dados no arquivo JSON. Esta função é definida na aula JsonService .

Observe que para escrever uma lista de strings JSON, usamos a função beginArray () e endArray () . Entre essas duas funções, escrevemos cada string JSON.

public void writeDataToJsonFile(String filePath, List roles, List 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) { } } 

Chamamos o código acima na aula XmlToJsonService .

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

Esse é o primeiro processo.

Converta mensagem JSON em objetos Java usando Gson

Na primeira etapa do segundo processo, definimos a função getDataFromJsonFile para ler dados do arquivo JSON. Esta função é definida na aula JsonService .

Observe que para ler uma lista de strings JSON, usamos a função beginArray () e endArray () . Entre essas duas funções, lemos cada string JSON.

public void getDataFromJsonFile(String filePath, List roles, List 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) { } } 

Chamamos o código acima na aula XmlToJsonService .

 JsonService jsonService = new JsonService(); List roles = new ArrayList(); List persons = new ArrayList(); jsonService.getDataFromJsonFile(filePathIn, roles, persons); 

Como converter Json para XML Java?

JSON para XML no JAVA é convertido usando JSONObject json = new JSONObject (str); Fragmento xml = XML . Se você tiver um arquivo dtd válido ou o arquivo xml, é muito fácil transformar json em xml e também xml em json.

Em seguida, vamos para a próxima etapa.

Converta objetos Java em mensagem XML usando JAXB

Nesta etapa, usamos a técnica Marshalling de JAXB.

Marshalling fornece a um aplicativo cliente a capacidade de converter uma árvore de objetos Java derivada de JAXB em dados XML.

Definimos a função parseObjectToXm para empacotar o objeto Java na mensagem XML. Esta função é definida na classe

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

Chamamos o código acima na aula 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);

Esse é o segundo processo.

Conclusão

Neste tutorial, aprendemos brevemente uma maneira pela qual JAXB pode ler dados XML e Gson gravá-los em JSON. Pelo contrário, também vimos a maneira como Gson lê dados JSON e JAXB os grava em XML.

Este artigo é uma contribuição de David Howard