📋 O que é JSON?

💡 Definição

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

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

JavaScript
{
  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

Estrutura JSON JSON
{
  "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.

JSON
{
  "nome": "João Silva",
  "email": "joao@exemplo.com",
  "mensagem": "Olá, \"mundo\"!",
  "caminho": "C:\\Users\\Joao\\Documentos"
}
⚠️ Caracteres de Escape
  • \" - 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.

JSON
{
  "inteiro": 42,
  "decimal": 3.14159,
  "negativo": -17,
  "notacao_cientifica": 2.998e8,
  "negativo_decimal": -0.001
}
💡 Nota

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.

JSON
{
  "ativo": true,
  "admin": false,
  "verificado": true
}
⚠️ Atenção

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.

JSON
{
  "data_fim": null,
  "avatar": null,
  "comentario": null
}

null é diferente de:

  • "null" - é uma string
  • "" - é uma string vazia
  • false - é um booleano

Array (Lista)

Lista ordenada de valores entre colchetes [].

JSON
{
  "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 {}.

JSON
{
  "pessoa": {
    "nome": "Maria Santos",
    "idade": 28,
    "endereco": {
      "rua": "Rua das Flores",
      "cidade": "Porto",
      "codigo_postal": "4000-001"
    }
  }
}
💡 Dica

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

Objeto JSON JSON
{
  "chave1": "valor1",
  "chave2": "valor2",
  "chave3": "valor3"
}

Objeto Completo

Exemplo Prático JSON
{
  "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

Arrays JSON
{
  "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.

Array de Objetos JSON
{
  "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

JSON Aninhado JSON
{
  "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

Nome da empresa data.empresa.nome
Cidade data.empresa.morada.cidade
Latitude data.empresa.morada.coordenadas.lat
Primeiro departamento data.empresa.departamentos[0].nome
Funcionário do Marketing data.empresa.departamentos[1].funcionarios[0].nome

🚨 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]
💡 Como Validar JSON
  • 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:

Validador JSON
// 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:

  1. 'nome' deve ser "nome" - aspas duplas
  2. idade deve ser "idade" - chave precisa de aspas
  3. TRUE deve ser true - minúsculas
  4. 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"]
}