25 de nov de 2012

Gson – Converta JSON em um objeto Java de forma simples


O JSON (JavaScritp Object Notation) é um formato de representação de dados, que foi criada originalmente para representar objetos em Javascript. Comparando com o XML, o JSON é um formato bem mais leve e por isso vem sendo bastante utilizado.

O Gson é uma biblioteca em Java para transformar objetos Java em JSON e vice-versa.

Vamos construir uma aplicação simples para demonstrar como o Gson funciona. A aplicação vai funcionar da seguinte maneira: ler um arquivo json, transformar em um objeto Java e imprimir na tela as informações.

Primeiro passo é inserir no seu projeto a biblioteca do Gson. Se você usa o Maven acresente a seguinte dependência:
        
            com.google.code.gson
            gson
            2.2.2
        

Arquivo json para teste (pedido.json):
{
    "id" : 123456 ,
    "cliente":{
        "id" : 24,
        "nome" : "Pedr\u00e3o Rasga Zorba"
    },
    "itens":[
         {
            "id" : 1,        
            "nome" : "Cerveja Bhrama Garrrafa 600ml",
            "qtde" : 50
         },
         {
            "id" : 2,        
            "nome" : "Amendoim Jo\u00e3o Pon\u00eas",
            "qtde" : 10
         },
         {
            "id" : 3,
            "nome" : "Papel Higi\u00eanico Limpac\u00fa pacote c/ 4 unidades",
            "qtde" : 2
         }        
    ]    
}

Analisando o json “pedido”, verificamos que ele possui um atributo “id”, um outro objeto “cliente” e um array “itens”. Dessa forma, nosso conjunto de classes java vai ficar da seguinte maneira.

Pedido.java
package com.gsonexample;

import java.util.ArrayList;
import java.util.List;

public class Pedido {
    
    private Integer id;
    private Cliente cliente;
    private List itens;

    public Pedido() {
        itens = new ArrayList();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public List getItens() {
        return itens;
    }

    public void setItens(List itens) {
        this.itens = itens;
    }   
       
}

Cliente.java
package com.gsonexample;

public class Cliente {

    private Integer id;
    private String nome;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
       
}

Item.java
package com.gsonexample;

public class Item {

    private Integer id;
    private String nome;
    private Integer qtde;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Integer getQtde() {
        return qtde;
    }

    public void setQtde(Integer qtde) {
        this.qtde = qtde;
    }
    
}

Agora vamos usar o Gson para converter o arquivo pedido.json em uma instância da classe “Pedido”.

App.java
package com.gsonexample;

import com.google.gson.Gson;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

public class App {
    
    public static void main( String[] args ) throws FileNotFoundException{
        
        Reader reader = new FileReader(new File(ClassLoader.getSystemResource("pedido.json").getFile()));
        
        Gson gson = new Gson();
        Pedido pedido = gson.fromJson(reader, Pedido.class);
        
        System.out.print("Pedido: " + pedido.getId() +
                        "\nId Cliente: " + pedido.getCliente().getId() +
                        "\nNome: " + pedido.getCliente().getNome() +
                        "\nItens: ");
        
        for(Item item : pedido.getItens()){
            System.out.println("\n---------------------------------------" +
                            "\nid item: " + item.getId() +
                            "\nnome item: " + item.getNome() +
                            "\nqtde: " + item.getQtde());
        }
        
    }
}

Para fazer o processo inverso, ou seja, transformar o objeto java em json, utilize o método “toJson”.
String json = gson.toJson(pedido);

O Gson disponibiliza diversas outras funcionalidades, como a utilização de anotações por exemplo. Sugiro aos senhores darem uma olhada na documentação do projeto para conhecerem a ferramenta a fundo.

Referências:
http://www.json.org
http://code.google.com/p/google-gson

Código fonte: http://depositfiles.com/files/wmeas28k9

É isso ae patota feliz. Aqui é Java!

Nenhum comentário:

Postar um comentário