Introdução ao trabalho com JSON em Java
JSON (JavaScript Object Notation) é um formato leve de troca de dados, amplamente utilizado em aplicações web modernas, APIs e microsserviços. Em Java, trabalhar com JSON é uma parte essencial do desenvolvimento: desde a leitura de arquivos de configuração até a interação com serviços RESTful. Neste artigo, vamos abordar na prática como realizar parsing (conversão de JSON para objetos Java) e serialização (conversão de objetos Java para JSON) usando duas das bibliotecas mais populares: Jackson e Gson.
Veremos exemplos reais de código, aprenderemos a lidar com estruturas aninhadas e analisaremos erros típicos. Ao final do artigo, você será capaz de trabalhar com JSON com confiança em qualquer projeto Java.
1. Principais bibliotecas para trabalhar com JSON
Jackson vs Gson: qual escolher?
No mercado Java, existem várias bibliotecas para trabalhar com JSON, mas duas se tornaram o padrão de fato:
- Jackson — uma biblioteca mais performática e funcional. Suporta anotações, processamento em fluxo e serializadores personalizados. Recomendada para projetos enterprise.
- Gson — uma biblioteca simples e leve do Google. Ideal para projetos pequenos e prototipagem rápida.
Para usar qualquer uma delas, basta adicionar a dependência no pom.xml (Maven) ou build.gradle (Gradle).
Adicionando Jackson (Maven)
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version></dependency>Adicionando Gson (Maven)
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version></dependency>2. Parsing JSON: de string para objeto Java
Parsing é o processo de converter uma string JSON em um objeto Java. Vamos analisar ambas as abordagens usando a classe simples User como exemplo.
Criando o modelo de dados
public class User { private String name; private int age; private String email;
// Construtor vazio é obrigatório! public User() {}
// Getters e Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }}Parsing com Jackson
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonParsingExample { public static void main(String[] args) throws Exception { String json = "{\\"name\\":\\"Ivan\\",\\"age\\":30,\\"email\\":\\"ivan@example.com\\"}"; ObjectMapper mapper = new ObjectMapper(); User user = mapper.readValue(json, User.class); System.out.println("Nome: " + user.getName()); System.out.println("Idade: " + user.getAge()); }}Parsing com Gson
import com.google.gson.Gson;
public class GsonParsingExample { public static void main(String[] args) { String json = "{\\"name\\":\\"Maria\\",\\"age\\":25,\\"email\\":\\"maria@example.com\\"}"; Gson gson = new Gson(); User user = gson.fromJson(json, User.class); System.out.println("Nome: " + user.getName()); System.out.println("Email: " + user.getEmail()); }}3. Serialização: de objeto Java para JSON
Serialização é o processo inverso: pegamos um objeto Java e o convertemos em uma string JSON. Isso é necessário, por exempl