domingo, 21 de fevereiro de 2016

Convertendo objetos Java para JSON usando JSON-P

Falamos aqui na outra postagem sobre JAXB, a biblioteca padrão do Java para conversão de objetos para XML e vice versa. Hoje vamos falar sobre a conversão para JSON(um formato de dados famoso) usando JSON Processing.

JSON Explanation
Para um exemplo sobre uso de JSON com Android, veja esse artigo

API padrão do Java para JSON


O Java, por muitos anos, não tinha um padrão para a conversão de JSON, isso mudou com a JSR 353, que nos trouxe o JSON-P (JSON Processing).
Nessa especificação temos uma nova API para realizar transformação de JSON que é baseada em manipular a estrutura do JSON usando Java. Ou seja, não é uma API de binding, como mostrados para XML(onde podemos fazer a correspondência de um objeto Java para JSON ! Para isso temos a JSON-B(JSON binding), que ainda está em discussão e fará parte do Java EE 8, por enquanto podemos usar a API Jackson.

A API JSON Processing

Para utilizarmos JSON-P, temos que conhecer algumas classes importantes. Veja a tabela traduzida dessa página:

Principais classes e interfaces do pacote javax.json
Classe ou InterfaceDescrição
Json
Contém métodos especifícicos para criar instâncias de parsers JSON, builders e fábricas para criar objetos.
JsonReader
Lê JSON de um Stream e cria objetos de modelo em memória. (objetos de modelo que representam o JSON)
JsonObjectBuilder
JsonArrayBuilder
Cria um modelo de objeto ou um modelo de array na memória adicionando elementos da aplicação.
JsonWriter
Escreve um objeto da memória para um Stream.
JsonValue
Representa um elemento (como um objeto, um array ou um valor) em dados no formato JSON.
JsonStructure
Representa um objeto ou um array no formato JSON. É um subtipo do JsonValue.
JsonObject
JsonArray
Representa um objeto ou um array no tipo JSON.Essas interfaces são subtipos de JsonStructure.
JsonString
JsonNumber
Representam tipos de dados em JSON. Essas interfaces são subtipos de  JsonValue.
JsonException
Indicate que houve um error no processamento do JSON.

Principais classes e interfaces do pacto javax.json.stream
Classe ou interfaceDescrição
JsonParser
Representa um parser baseado em JSON que pode ler dados JSON de um Stream ou de um objeto de modelo.
JsonGenerator
Escreve JSON para um Stream, um elemento por vez.




Se você leu ali em cima,vamos ao código para "digerir" a informação.

Uma aplicação de exemplo


Vamos utilizar o mesmo objeto do post passado, o Artigo. Como iremos usar maven, precisamos adicionar a API e a implementação. Abaixo você pode ver o código Java e o JSON usado. O método javaParaJson gera o JSON a partir de uma lista de artigos e o mesmo JSON gerado será lido no métódo jsonParaJava devidamente comentados.


Conclusão


Apresentamos JSON-P e falamos da conversão JSON para Java e vice versa. Embora Java ainda não tenha uma forma nativa de lidar com JSON, a API JSON-P é simples de ser usada e a nova API JSON-B promete a mesma facilidade do JAXB para JSON.

O projeto maven usado nessa postagem está on github!



Nenhum comentário:

Postar um comentário