domingo, 17 de abril de 2016

Json com Jackson


Atualmente são inúmeras a quantidade de bibliotecas para se trabalhar com Json, isso se deve a notação leve de troca de dados, a facilidade de interpretação, tanto humana quanto a nível de máquina.
Nesse post eu vou estar explicando como trabalhar com esse carinha aqui, Jackson.

Json com Jackson



Bom, mas antes de falarmos sobre a biblioteca vamos entender um pouco sobre o que é Json. O site oficial descreve Json sendo:

"JSON (JavaScript Object Notation - Notação de Objetos JavaScript) é uma formatação leve de troca de dados.
Para seres humanos, é fácil de ler e escrever. Para máquinas, é fácil de interpretar e gerar.

Está baseado em um subconjunto da linguagem de programação JavaScript.
JSON é em formato texto e completamente independente de linguagem, pois usa convenções que são familiares às linguagens C e familiares, incluindo C++, C#, Java, JavaScript, Perl, Python e muitas outras.

Estas propriedades fazem com que JSON seja um formato ideal de troca de dados.
JSON está constituído em duas estruturas:
  • Uma coleção de pares nome/valor. Em várias linguagens, isto é caracterizado como um object, record, struct, dicionário, hash table, keyed list, ou arrays associativas.
  • Uma lista ordenada de valores. Na maioria das linguagens, isto é caracterizado como uma array, vetor, lista ou sequência.
Estas são estruturas de dados universais. Virtualmente todas as linguagens de programação modernas as suportam, de uma forma ou de outra. É aceitavel que um formato de troca de dados que seja independente de linguagem de programação se baseie nestas estruturas." Para mais informações acesse o site Json-BR.

Já sabemos o motivo da quantidade de bibliotecas existentes, o motivo de tanta informação relacionado a "formatação" JSON que tende a ser usado cada vez mais em várias aplicações.

Agora, sobre a nossa biblioteca, vamos aprender como converter Java para Json e Json para Java.

Vamos considerar o pojo abaixo:

public class Pessoa {

    private String nome;
    private int idade;
    private String profissao;
    private BigDecimal salario;
    private List habilidade;

    //getters and setters
}

Seria necessário configurar e criar a estrutura em um banco de dados, mas para nível de entendimento vamos criar um arquivo texto, dando o nome para o arquivo de "Pessoa.json" e salvar em algum lugar da sua máquina, aqui estarei salvando em "D://Pessoa.json".
Nesse arquivo teremos o seguinte registro:

{"nome":"Fagner Zordan","idade":26,"profissao":"Analista de Sistemas","salario":10000,"habilidade":["java","php","unity3d"]}

Lembre-se Json trabalha com "chave":"valor", um exemplo seria: "nome":"Fagner Zordan".
Note que os atributos da nossa classe "Pessoa" possui os mesmas chaves no nosso arquivo Json.

Já temos nosso pojo criado com os get e set implementados, temos nosso registro no formato Json salvo na nossa máquina, vamos agora converter o objeto Java em JSON:

ObjectMapper mapper = new ObjectMapper();
Pessoa obj = new Pessoa();

//Objeto para JSON salvo no arquivo
mapper.writeValue(new File("D:\\Pessoa.json"), obj);

//Objeto para JSON armazenado em String

String jsonEmString = mapper.writeValueAsString(obj);


E no trecho a seguir convertemos JSON para objeto Java:

ObjectMapper mapper = new ObjectMapper();
String jsonEmString = "{'nome' : 'Fagner Zordan'}";

//JSON do arquivo para Objeto
Pessoa obj = mapper.readValue(new File("D:\\Pessoa.json"), Pessoa.class);

//JSON de uma URL para Objeto
Pessoa obj = mapper.readValue(new URL("http://www.deviscoming.blogspot.com.br/Pessoa.json"), Pessoa.class);

//JSON de uma String para Objeto
Pessoa obj = mapper.readValue(jsonEmString, Pessoa.class);

Viu como é fácil?
Logo estarei disponibilizando um "projeto" (aplicação funcionando usando JSON) no github, e volto a postar aqui.

Por enquanto é isso, abraço e até a próxima.
Luiz Fagner Zordan Analista de Sistemas

Graduado em Sistemas de Informação, atualmente trabalhando na Embraer pela FocusNetworks como FullStack. Sou apaixonado por tecnologia, fascinado por jogos e adoro passar o tempo assistindo séries.