JSON (JavaScript Object Notation) é um formato bem leve que permite a troca de dados, principalmente em Sistemas Distribuídos (WebServices em sua maioria). Além de ser simples e leve, é de fácil entendimento para leitura e escrita. JSON é baseado em um subconjunto da linguagem de programação JavaScript, sendo sua base independente de qualquer idioma. Usa convenções familiares aos programadores de diversas linguagens, como C, C + +, C #, Java, JavaScript, Perl, Python, e muitas outras. Estas propriedades fazem JSON uma linguagem de intercâmbio de dados ideal. Em Java, existem alguns frameworks que trazem facilidades para se trabalhar com JSON. Neste artigo iremos mostrar o GSON.

GSON é uma biblioteca do Google utilizada, entre outras coisas, na conversão de objetos Java em representação JSON. Também pode ser utilizada para converter uma cadeia JSON para um objetos Java equivalentes. Com GSON podemos trabalhar com objetos Java arbitrários, incluindo objetos pré-existentes dos quais não possuímos o código-fonte.

A estrutura básica JSON para representar um simples objeto é um conjunto desordenado de pares nome/valor. Um objeto começa com { (chave esquerda) e termina com } (chave direita). Cada nome é seguido por : (dois pontos) e os pares nome/valor são separados por , (vírgula). A Figura 1 mostra a estrutura de um objeto em JSON.

Estrutura de objeto em JSON

Figura 1: Estrutura de objeto em JSON

Para melhorar o entendimento, vamos dar um exemplo simples de representação de um objeto em JSON. Supondo que temos uma classe Informações, e esta classe apresente dois atributos, informacao1 e informacao2. Este exemplo em JSON, ficaria: {"informacao1":500,"informacao2":"Olá"}. Como podemos ver é uma estrutura simples. Mas isso é somente o começo. JSON permite ainda representar muitas outras estruturas, como arrays, e outros tipos de dados como String, tipos numéricos, entre outros.

Antes de iniciarmos a parte prática, precisamos da biblioteca GSON. Esta biblioteca foi desenvolvida a partir de um projeto Google, de mesmo nome, podendo ser realizado o seu download, ou vista a documentação neste link.

Com a biblioteca em mãos, vamos iniciar o projeto. Vamos criar um projeto Java simples, e adicionar a biblioteca GSON ao nosso projeto. Ele será baseado em três classes. A classe Informacoes, uma entidade que representará o objeto a ser convertido. A classe que realizará a conversão de Java para Json Java2Json, e a classe Json2Java, responsável por converter um arquivo Json em objeto Java. A Listagem 1 mostra a classe Informacoes.

Listagem 1: Classe Informacoes


package com.br.entity;

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

public class Informacoes {
	
	private int informacao1 = 500;
	private String informacao2 = "Olá";
	
	@SuppressWarnings("serial")
	private List<String> listaInformacoes = new ArrayList<String>() {
	  {
		add("String 1");
		add("String 2");
		add("String 3");
	  }
	};
 
	@Override
	public String toString() {
	   return "Informacoes [Informação 1 =" + informacao1 + 
", Informação 2 =" + informacao2 + ", list=" + listaInformacoes + "]";
	}

	public int getInformacao1() {
		return informacao1;
	}

	public void setInformacao1(int informacao1) {
		this.informacao1 = informacao1;
	}

	public String getInformacao2() {
		return informacao2;
	}

	public void setInformacao2(String informacao2) {
		this.informacao2 = informacao2;
	}

	public List<String> getListaInformacoes() {
		return listaInformacoes;
	}

	public void setListaInformacoes(List<String> listaInformacoes) {
		this.listaInformacoes = listaInformacoes;
	}
}

Esta classe representa a entidade que será convertida para Json. Apresenta três propriedades. Uma de tipo numérico (int), outra de tipo texto (String), e uma lista de textos (lista de Strings). Todas essas propriedades serão convertidas automaticamente para dados Json, através da biblioteca GSON. A Listagem 2 mostra a classe Java2Json, responsável por converter um objeto do tipo Informacoes em representação JSON e criar um arquivo com o Json correspondente dentro do diretório C de nosso Sistema Operacional (Windows somente).

Listagem 2: Classe Java2Json, responsável por converter Java para Json


package com.br.core;

import java.io.FileWriter;
import java.io.IOException;
import com.br.entity.Informacoes;
import com.google.gson.Gson;

public class Java2Json {
    public static void main(String[] args) {
 
	Informacoes obj = new Informacoes();
	Gson gson = new Gson();
 
	// converte objetos Java para JSON e retorna JSON como String
	String json = gson.toJson(obj);
 
	try {
		//Escreve Json convertido em arquivo chamado "file.json"
		FileWriter writer = new FileWriter("C:\\file.json");
		writer.write(json);
		writer.close();
 
	} catch (IOException e) {
		e.printStackTrace();
	}
 
	System.out.println(json);
 
    }
}

Após executar a classe Java2Json, um arquivo chamado file.json será criado na unidade C de nosso Sistema Operacional. Este arquivo armazena uma estrutura tipo Json. A classe Json2Java irá ler esse arquivo, transformá-lo em objeto e utiliza-lo em conjunto com o método sobrecarregado toString() da classe Informacoes para exibir o conteúdo do arquivo. A Listagem 3 mostra a classe Json2Java.

Listagem 3: Classe Json2Java, responsável por converter Json para Java


package com.br.core;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.br.entity.Informacoes;
import com.google.gson.Gson;

public class Json2Java {
	public static void main(String[] args) {

		Gson gson = new Gson();

		try {

			BufferedReader br = new BufferedReader(new FileReader("c:\\file.json"));

			//Converte String JSON para objeto Java
			Informacoes obj = gson.fromJson(br, Informacoes.class);

			System.out.println(obj);

		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

Apesar de apresentarmos somente as características básicas desta interessante biblioteca (Gson), vimos as principais características que permitem se trabalhar diretamente com objetos Java e representação Json, angariando produtividade e simplicidade para nossas aplicações. Por hoje é isso pessoal, abraço e até a próxima.