📝 Exercícios Práticos

Coloca em prática o que aprendeste! Validação de JSON, quizzes e desafios de código em PHP e JavaScript.

📊 O Teu Progresso

0/5 módulos visitados

📋 Quizzes de JSON

1 Sintaxe JSON Básico ▼

Qual das seguintes opções é um JSON válido?

2 Tipos de Dados Básico ▼

Quais são os tipos de dados válidos em JSON? (Seleciona todos os corretos)

3 Arrays em JSON Básico ▼

O que representa o seguinte JSON?

{
  "alunos": [
    { "nome": "Ana", "nota": 18 },
    { "nome": "Bruno", "nota": 15 }
  ]
}
4 JSON vs Outros Formatos Intermediário ▼

Qual é uma diferença importante entre JSON e XML?

5 Erros Comuns Intermediário ▼

O que está errado neste JSON?

{
  "nome": "Maria",
  'idade': 25,
  "ativo": true
}
6 json_encode em PHP Intermediário ▼

O que retorna o seguinte código PHP?

$dados = ["nome" => "Ana", "idade" => 30];
echo json_encode($dados);
7 JSON.parse em JavaScript Intermediário ▼

O que acontece se executares JSON.parse('{"a":1}') em JavaScript?

✓ Validador JSON

Cola o teu JSON aqui para verificar se está correto e formatá-lo.

O resultado aparecerá aqui...
💡 Dica

JSON válido deve usar aspas duplas em todas as chaves e strings. Números, booleanos e null não levam aspas.

📝 Exemplos para Testar

✓ JSON Válido

{
  "produto": "Laptop",
  "preco": 999.99,
  "disponivel": true,
  "categorias": ["tecnologia", "computadores"]
}

✓ JSON Válido (Array)

[
  { "id": 1, "nome": "Ana" },
  { "id": 2, "nome": "Bruno" },
  { "id": 3, "nome": "Carla" }
]

✗ JSON Inválido (aspas simples)

{
  'nome': 'Erro',
  'valor': 100
}

✗ JSON Inválido (vírgula extra)

{
  "nome": "Erro",
  "valor": 100,
}

🐘 Exercícios PHP

PHP1 Converter Array para JSON Básico ▼

Escreve código PHP que converta o seguinte array para JSON:

$utilizador = [
    "nome" => "João",
    "email" => "joao@email.pt",
    "ativo" => true
];
Solução PHP
$utilizador = [
    "nome" => "João",
    "email" => "joao@email.pt",
    "ativo" => true
];

$json = json_encode($utilizador);
echo $json;
// Resultado: {"nome":"João","email":"joao@email.pt","ativo":true}
PHP2 Decodificar JSON para Array Básico ▼

Como converter este JSON para um array PHP e aceder ao nome?

$json = '{"produto":"Laptop","preco":999.99}';
Solução PHP
$json = '{"produto":"Laptop","preco":999.99}';

// Converter para array associativo
$dados = json_decode($json, true);

// Aceder aos valores
echo $dados['produto']; // Laptop
echo $dados['preco'];   // 999.99
PHP3 JSON com Caracteres Especiais Intermediário ▼

Como codificar JSON com caracteres especiais (ç, ã, é) corretamente?

Solução PHP
$dados = [
    "nome" => "José Gonçalves",
    "cidade" => "São Paulo",
    "descrição" => "Coração do Brasil"
];

// Usar JSON_UNESCAPED_UNICODE para manter caracteres
$json = json_encode($dados, JSON_UNESCAPED_UNICODE);
echo $json;
// {"nome":"José Gonçalves","cidade":"São Paulo","descrição":"Coração do Brasil"}

// Sem a flag:
$json_escaped = json_encode($dados);
// {"nome":"Jos\u00e9 Gon\u00e7alves","cidade":"S\u00e3o Paulo",...}
PHP4 Ler JSON de Ficheiro Intermediário ▼

Como ler e processar um ficheiro JSON em PHP?

Solução PHP
// Ler ficheiro JSON
$caminho = 'dados/config.json';
$json_string = file_get_contents($caminho);

// Decodificar
$dados = json_decode($json_string, true);

// Verificar erros
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "Erro ao decodificar JSON: " . json_last_error_msg();
} else {
    print_r($dados);
}
PHP5 API REST com JSON Avançado ▼

Como consumir uma API REST que retorna JSON?

Solução PHP
// Consumir API REST
$url = 'https://api.exemplo.com/utilizadores/1';

// Método com file_get_contents
$json = file_get_contents($url);
$dados = json_decode($json, true);

// Método com cURL (mais robusto)
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer token123'
]);
$resposta = curl_exec($ch);
curl_close($ch);

$dados = json_decode($resposta, true);
echo "Nome: " . $dados['nome'];

📜 Exercícios JavaScript

JS1 Converter Objeto para JSON Básico ▼

Converte o seguinte objeto JavaScript para JSON:

const produto = {
    nome: "Telemóvel",
    preco: 599.99,
    emStock: true
};
Solução JavaScript
const produto = {
    nome: "Telemóvel",
    preco: 599.99,
    emStock: true
};

const json = JSON.stringify(produto);
console.log(json);
// {"nome":"Telemóvel","preco":599.99,"emStock":true}

// Com formatação bonita
const jsonFormatado = JSON.stringify(produto, null, 2);
console.log(jsonFormatado);
JS2 Parse JSON para Objeto Básico ▼

Como converter esta string JSON para um objeto e aceder às propriedades?

const json = '{"cidade":"Porto","populacao":250000}';
Solução JavaScript
const json = '{"cidade":"Porto","populacao":250000}';

// Converter para objeto
const dados = JSON.parse(json);

// Aceder às propriedades
console.log(dados.cidade);      // Porto
console.log(dados.populacao);   // 250000

// Com tratamento de erro
try {
    const dados = JSON.parse(json);
    console.log(dados.cidade);
} catch (erro) {
    console.error("JSON inválido:", erro.message);
}
JS3 Fetch API com JSON Intermediário ▼

Como usar fetch para obter dados JSON de uma API?

Solução JavaScript
// Fetch com async/await
async function obterUtilizadores() {
    try {
        const resposta = await fetch('https://api.exemplo.com/utilizadores');

        if (!resposta.ok) {
            throw new Error('Erro na resposta');
        }

        const dados = await resposta.json();
        console.log(dados);
        return dados;
    } catch (erro) {
        console.error('Erro:', erro);
    }
}

// Fetch com .then()
fetch('https://api.exemplo.com/utilizadores')
    .then(resposta => resposta.json())
    .then(dados => console.log(dados))
    .catch(erro => console.error('Erro:', erro));
JS4 Guardar JSON no LocalStorage Intermediário ▼

Como guardar e recuperar objetos no localStorage?

Solução JavaScript
// Guardar objeto no localStorage
const utilizador = {
    nome: "Ana",
    preferencias: {
        tema: "escuro",
        idioma: "pt-PT"
    }
};

// Converter para JSON e guardar
localStorage.setItem('utilizador', JSON.stringify(utilizador));

// Recuperar do localStorage
const json = localStorage.getItem('utilizador');
const dados = JSON.parse(json);

console.log(dados.nome);           // Ana
console.log(dados.preferencias.tema); // escuro

// Remover
localStorage.removeItem('utilizador');

// Limpar tudo
localStorage.clear();
JS5 POST com JSON Avançado ▼

Como enviar dados JSON para uma API com POST?

Solução JavaScript
// Enviar dados com POST
async function criarUtilizador(dados) {
    try {
        const resposta = await fetch('https://api.exemplo.com/utilizadores', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer token123'
            },
            body: JSON.stringify(dados)
        });

        if (!resposta.ok) {
            throw new Error('Erro ao criar utilizador');
        }

        const novoUtilizador = await resposta.json();
        console.log('Criado:', novoUtilizador);
        return novoUtilizador;
    } catch (erro) {
        console.error('Erro:', erro);
    }
}

// Usar a função
criarUtilizador({
    nome: "Maria Silva",
    email: "maria@email.pt"
});
JS6 Filtrar Array JSON Intermediário ▼

Como filtrar e transformar dados de um array JSON?

Solução JavaScript
const json = `[
    {"id": 1, "nome": "Ana", "ativo": true},
    {"id": 2, "nome": "Bruno", "ativo": false},
    {"id": 3, "nome": "Carla", "ativo": true}
]`;

const utilizadores = JSON.parse(json);

// Filtrar utilizadores ativos
const ativos = utilizadores.filter(u => u.ativo);
console.log(ativos);
// [{id: 1, nome: "Ana", ativo: true}, {id: 3, nome: "Carla", ativo: true}]

// Mapear para apenas nomes
const nomes = utilizadores.map(u => u.nome);
console.log(nomes);
// ["Ana", "Bruno", "Carla"]

// Encontrar por ID
const utilizador = utilizadores.find(u => u.id === 2);
console.log(utilizador);
// {id: 2, nome: "Bruno", ativo: false}

// Ordenar por nome
const ordenados = [...utilizadores].sort((a, b) =>
    a.nome.localeCompare(b.nome)
);