1. O que é JSON (JavaScript Object Notation)?
JSON (lê-se como “djei-son”, não “zhé-son”!) significa JavaScript Object Notation. Apesar da palavra “JavaScript” no nome, JSON é um formato universal, suportado por praticamente todas as linguagens de programação, incluindo Java.
JSON foi criado por Douglas Crockford no início dos anos 2000 como uma forma simples de troca de dados entre o navegador e o servidor. Antes dele, predominava o XML — verboso e sobrecarregado de tags.
JSON acabou sendo mais compacto, simples e fácil de ler “a olho nu”. Rapidamente se tornou o padrão de fato para a troca de dados entre cliente e servidor, especialmente na web e em aplicativos móveis.
Por que o JSON se tornou padrão?
- Sintaxe simples — fácil de escrever e ler manualmente.
- Compacidade — sem tags e verborragia desnecessárias.
- Legibilidade — até quem não é da área técnica entende o que está acontecendo.
- Facilidade de parsing — a maioria das linguagens tem bibliotecas nativas/terceiras.
- Entre linguagens — Java, Python, Kotlin etc. — todas suportam JSON.
- Padrão para REST API — a esmagadora maioria dos APIs retorna JSON.
Comparação com XML
| JSON | XML | |
|---|---|---|
| Legibilidade | Muito alta | Média (muitas tags) |
| Tamanho | Compacto | Mais pesado |
| Parsing | Simples | Exige mais esforço |
| Extensibilidade | Suporta aninhamento | Suporta aninhamento |
| Rigor | Menos formal | Permite descrever esquemas |
| Popularidade (2020+) | Muito alta | É usado, mas com menos frequência |
Vitória do JSON em quase todos os pontos. Mesmo assim, XML continua relevante onde são necessários esquemas complexos, tipagem rígida, validação via XSD, suporte a comentários e atributos — por exemplo, em sistemas legados e software bancário.
Na prática, se você não está escrevendo software para um banco ou uma nave espacial — use JSON.
2. Sintaxe básica do JSON
Se você já trabalhou com objetos JavaScript ou dicionários em outras linguagens, a sintaxe vai soar familiar. Em Java não há um “dicionário” direto; esse papel é desempenhado pelas coleções de java.util, principalmente Map<K, V> (na maioria das vezes — HashMap<K, V>).
Elementos principais
- Objetos — um conjunto de pares “chave: valor”, envoltos em { }.
- Arrays — listas ordenadas de valores, envoltas em [ ].
Exemplo de objeto:
{
"name": "Alice",
"age": 25
}
Exemplo de array:
[1, 2, 3, 4, 5]
Exemplo de objeto com array:
{
"students": [
"Ivan",
"Maria",
"John"
]
}
Tipos de valores permitidos
No JSON você pode usar apenas os seguintes tipos de dados:
| Tipo | Exemplo | Descrição |
|---|---|---|
| String | |
Sempre entre aspas duplas |
| Número | |
Inteiros e decimais |
| Booleano | |
Valores lógicos |
| null | |
“Vazio”, ausência de valor |
| Objeto | |
Conjunto de pares “chave: valor” |
| Array | |
Lista de valores |
Atenção: as chaves em objetos — são sempre strings em aspas duplas, por exemplo "name". Aspas simples não são permitidas.
Exemplos de JSON válido
{
"id": 1,
"name": "Bob",
"active": true,
"scores": [10, 20, 30],
"profile": {
"email": "bob@example.com",
"phone": null
}
}
Exemplo de JSON inválido (erros)
{
name: 'Bob', // Erro: chaves e strings — apenas com aspas duplas!
age: 25,
}
3. Estrutura de dados: aninhamento de objetos e arrays
JSON suporta aninhamento profundo: objetos em objetos, arrays em objetos, objetos em arrays etc. É como uma matriosca.
Exemplo de documento JSON complexo
{
"university": "Java University",
"students": [
{
"name": "Ivan",
"age": 20,
"courses": ["Math", "Java", "English"]
},
{
"name": "Maria",
"age": 19,
"courses": ["Biology", "Java", "Art"]
}
],
"active": true
}
No objeto raiz há um campo string "university", um campo booleano "active" e um array "students", que contém objetos de estudantes.
Esquema visual (diagrama de blocos)
{
"chave": valor,
"array": [
{ "chave": valor },
{ "chave": valor }
],
"objeto": {
"chave": valor
}
}
4. Vantagens do JSON
Por que o JSON é tão popular?
- Lido facilmente por pessoas e máquinas — a estrutura é fácil de entender.
- Compacidade — mínimo de caracteres supérfluos.
- Facilidade de parsing — muitas bibliotecas para leitura/gravação.
- Padrão para REST API e aplicativos móveis — usado amplamente.
- Flexibilidade — descreve tanto listas simples quanto estruturas em árvore.
- Configs, preferências, armazenamento de dados — muito usado em configurações.
- Suporte em todas as linguagens — Java, Python, Go, Rust etc.
5. Prática: análise de exemplos de arquivos JSON
Exemplo 1: Lista de usuários
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
É um array em que cada elemento é um objeto de usuário.
Exemplo 2: Configuração de aplicativo
{
"debug": true,
"maxConnections": 100,
"database": {
"host": "localhost",
"port": 5432,
"user": "admin",
"password": "qwerty"
}
}
Um objeto com o objeto aninhado "database". Muito parecido com configurações reais de aplicativos.
Exemplo 3: Erros em JSON
{
"name": "Alice",
"age": 25,
} // Erro: vírgula extra antes da chave de fechamento!
Lembre-se: no JSON não pode haver vírgula após o último elemento.
Exemplo 4: Chaves sem aspas
{ name: "Alice", age: 25 } // Erro: as chaves devem estar entre aspas duplas!
6. Nuances úteis
Tabela: o que pode e o que não pode no JSON
| Pode | Não pode |
|---|---|
|
|
|
|
|
|
|
|
|
|
Comparação rápida entre JSON e objetos Java
| Java | JSON |
|---|---|
|
Número, true/false |
|
"string" |
| List<T>, array | [valor1, valor2, ...] |
|
{ "chave": valor, ... } |
|
null |
| Classe com campos | { "campo": valor, ... } |
Exemplo: classe Java e sua representação em JSON
public class Student {
public String name;
public int age;
}
{
"name": "Alice",
"age": 20
}
7. Erros típicos ao trabalhar com JSON
Erro nº 1: Aspas simples em vez de aspas duplas. JSON aceita apenas aspas duplas para chaves e strings.
{ 'name': 'Alice' } // Erro!
Erro nº 2: Vírgula sobrando. Não pode haver vírgula após o último elemento.
{ "name": "Alice", } // Erro!
Erro nº 3: Chaves sem aspas. As chaves sempre devem estar entre aspas duplas.
{ name: "Alice" } // Erro!
Erro nº 4: Números com zeros à esquerda. Tais números não são permitidos.
{ "age": 025 } // Erro!
Erro nº 5: Uso de undefined. No JSON não existe undefined; use null.
{ "value": undefined } // Erro!
Erro nº 6: True/False com inicial maiúscula. No JSON apenas true e false (minúsculas).
{ "active": True } // Erro!
GO TO FULL VERSION