📋 O que é JSON?
JSON (JavaScript Object Notation) é um formato de dados leve e fácil de ler, baseado em texto, usado para armazenar e transportar dados. É independente de linguagem e amplamente usado em APIs e configurações.
Características Principais
- Formato de texto: Podes ler e editar JSON em qualquer editor de texto
- Independente de linguagem: Funciona com PHP, JavaScript, Python, Java, etc.
- Estruturado: Organiza dados em pares chave-valor e arrays
- Leve: Não tem tags de abertura/fecho como XML
- Hierárquico: Permite estruturas aninhadas complexas
JSON vs JavaScript Object
JSON
{
"nome": "João",
"idade": 25,
"ativo": true
}
- Chaves em aspas duplas
- Strings sempre em aspas duplas
- Não permite comentários
- Trailing comma não permitido
JavaScript Object
{
nome: "João",
idade: 25,
ativo: true,
}
- Chaves podem ser sem aspas
- Strings com aspas simples ou duplas
- Permite comentários
- Trailing comma permitido
📝 Sintaxe JSON
Regras Básicas
| Regra | Correto ✓ | Incorreto ✗ |
|---|---|---|
| Chaves em aspas duplas | "nome" |
nome ou 'nome' |
| Strings em aspas duplas | "texto" |
'texto' ou sem aspas |
| Vírgula entre itens | ["a", "b"] |
["a" "b"] |
| Sem vírgula final | {"a": 1} |
{"a": 1,} |
Estrutura Básica
{
"chave": "valor",
"numero": 42,
"booleano": true,
"nulo": null,
"array": [1, 2, 3],
"objeto": {
"aninhado": "valor"
}
}
🔢 Tipos de Dados
JSON suporta 6 tipos de dados:
String (Texto)
Sequência de caracteres entre aspas duplas.
{
"nome": "João Silva",
"email": "joao@exemplo.com",
"mensagem": "Olá, \"mundo\"!",
"caminho": "C:\\Users\\Joao\\Documentos"
}
\"- Aspas duplas\\- Barra invertida\n- Nova linha\t- Tabulação\uXXXX- Unicode
Number (Número)
Números inteiros ou decimais. JSON não distingue entre tipos de números.
{
"inteiro": 42,
"decimal": 3.14159,
"negativo": -17,
"notacao_cientifica": 2.998e8,
"negativo_decimal": -0.001
}
JSON não suporta NaN ou Infinity. Usa null para representar valores inválidos.
Boolean (Lógico)
Valores verdadeiro ou falso. Escritos em minúsculas.
{
"ativo": true,
"admin": false,
"verificado": true
}
true e false devem ser escritos em minúsculas. True, TRUE ou True são inválidos!
Null (Nulo)
Representa a ausência de valor.
{
"data_fim": null,
"avatar": null,
"comentario": null
}
null é diferente de:
"null"- é uma string""- é uma string vaziafalse- é um booleano
Array (Lista)
Lista ordenada de valores entre colchetes [].
{
"numeros": [1, 2, 3, 4, 5],
"strings": ["azul", "verde", "vermelho"],
"misturado": [1, "dois", true, null],
"vazio": [],
"de_objetos": [
{"nome": "Ana", "idade": 25},
{"nome": "Bruno", "idade": 30}
]
}
Object (Objeto)
Coleção de pares chave-valor entre chavetas {}.
{
"pessoa": {
"nome": "Maria Santos",
"idade": 28,
"endereco": {
"rua": "Rua das Flores",
"cidade": "Porto",
"codigo_postal": "4000-001"
}
}
}
Os objetos são coleções não ordenadas. A ordem das chaves não é garantida!
📦 Objetos JSON
Um objeto JSON é uma coleção de pares chave-valor, envolvidos por chavetas {}.
Estrutura
{
"chave1": "valor1",
"chave2": "valor2",
"chave3": "valor3"
}
Objeto Completo
{
"id": 1001,
"produto": "Laptop",
"marca": "TechBrand",
"preco": 899.99,
"disponivel": true,
"especificacoes": {
"processador": "Intel i7",
"ram": "16GB",
"armazenamento": "512GB SSD"
},
"cores": ["preto", "prata", "azul"],
"garantia": null
}
Aceder a Valores
JavaScript
const data = JSON.parse(jsonString);
// Notação ponto
console.log(data.produto); // "Laptop"
// Notação colchete
console.log(data["preco"]); // 899.99
// Aninhado
console.log(data.especificacoes.ram); // "16GB"
// Array
console.log(data.cores[0]); // "preto"
PHP
$data = json_decode($jsonString, true);
// Array associativo
echo $data['produto']; // "Laptop"
echo $data['preco']; // 899.99
// Aninhado
echo $data['especificacoes']['ram']; // "16GB"
// Array
echo $data['cores'][0]; // "preto"
📋 Arrays JSON
Um array JSON é uma lista ordenada de valores, envolvida por colchetes [].
Arrays Simples
{
"numeros": [1, 2, 3, 4, 5],
"strings": ["ana", "bruno", "carla"],
"boleanos": [true, false, true],
"misturado": [1, "dois", true, null, {"chave": "valor"}]
}
Array de Objetos
Muito comum em APIs para representar listas de itens.
{
"utilizadores": [
{
"id": 1,
"nome": "Ana",
"email": "ana@exemplo.com"
},
{
"id": 2,
"nome": "Bruno",
"email": "bruno@exemplo.com"
},
{
"id": 3,
"nome": "Carla",
"email": "carla@exemplo.com"
}
]
}
Percorrer Arrays
JavaScript
const data = JSON.parse(jsonString);
// forEach
data.utilizadores.forEach(user => {
console.log(user.nome);
});
// for tradicional
for (let i = 0; i < data.utilizadores.length; i++) {
console.log(data.utilizadores[i].nome);
}
// filter
const admins = data.utilizadores
.filter(u => u.email.includes('admin'));
PHP
$data = json_decode($jsonString, true);
// foreach
foreach ($data['utilizadores'] as $user) {
echo $user['nome'] . "\n";
}
// for tradicional
for ($i = 0; $i < count($data['utilizadores']); $i++) {
echo $data['utilizadores'][$i]['nome'] . "\n";
}
// array_filter
$admins = array_filter($data['utilizadores'],
fn($u) => strpos($u['email'], 'admin') !== false
);
🏗️ Aninhamento
JSON suporta estruturas aninhadas complexas, com objetos dentro de objetos, arrays dentro de arrays, etc.
Exemplo Completo
{
"empresa": {
"nome": "Tech Solutions",
"morada": {
"rua": "Av. Principal",
"numero": 123,
"cidade": "Lisboa",
"coordenadas": {
"lat": 38.7223,
"lng": -9.1393
}
},
"departamentos": [
{
"nome": "Desenvolvimento",
"funcionarios": [
{"nome": "Ana", "cargo": "Senior Developer"},
{"nome": "Bruno", "cargo": "Junior Developer"}
]
},
{
"nome": "Marketing",
"funcionarios": [
{"nome": "Carla", "cargo": "Marketing Manager"}
]
}
]
}
}
Aceder a Valores Aninhados
🚨 Erros Comuns
Erros de Sintaxe Frequentes
| Erro | JSON Inválido ✗ | JSON Válido ✓ |
|---|---|---|
| Aspas simples | {'nome': 'Ana'} |
{"nome": "Ana"} |
| Chave sem aspas | {nome: "Ana"} |
{"nome": "Ana"} |
| Vírgula final | {"a": 1,} |
{"a": 1} |
| Comentários | {"a": 1 /* comentário */} |
{"a": 1} |
| Undefined | {"valor": undefined} |
{"valor": null} |
| Trailing comma em array | [1, 2, 3,] |
[1, 2, 3] |
- Usa um validador online como jsonlint.com
- Usa
JSON.parse()em JavaScript - lança erro se inválido - Usa
json_decode()em PHP - retorna null se inválido - Muitos editores de código mostram erros de sintaxe JSON
Validação em Tempo Real
Copia e cola o teu JSON aqui para verificar se é válido:
// Cola aqui o teu JSON para validar
{
"exemplo": "Este é um JSON válido",
"numero": 42,
"ativo": true
}
📝 Exercícios
Exercício 1: Identificar Tipos
Problema: Identifica o tipo de cada valor neste JSON:
{
"nome": "Maria",
"idade": 28,
"saldo": 1250.50,
"ativo": true,
"telefone": null,
"tags": ["amigo", "trabalho"]
}
- "nome": "Maria" → String
- "idade": 28 → Number (inteiro)
- "saldo": 1250.50 → Number (decimal)
- "ativo": true → Boolean
- "telefone": null → Null
- "tags": [...] → Array
Exercício 2: Corrigir JSON
Problema: Este JSON tem 4 erros. Identifica e corrige.
{
'nome': 'João',
idade: 30,
"ativo": TRUE,
"hobbies": ["ler", "correr",],
}
Erros encontrados:
'nome'deve ser"nome"- aspas duplasidadedeve ser"idade"- chave precisa de aspasTRUEdeve sertrue- minúsculas- Vírgula final em
["ler", "correr",]deve ser removida
JSON Corrigido:
{
"nome": "João",
"idade": 30,
"ativo": true,
"hobbies": ["ler", "correr"]
}
Exercício 3: Criar JSON
Problema: Cria um JSON que represente um livro com: título, autor, ano de publicação, disponível (boolean), e uma lista de géneros.
{
"titulo": "Os Lusíadas",
"autor": "Luís de Camões",
"ano": 1572,
"disponivel": true,
"generos": ["épica", "poesia", "clássico"]
}