kb.erickguedes.com
JSON: Formato e Manipulação

Sintaxe e Tipos JSON

Aula 1 de 4

Sintaxe JSON

JSON (JavaScript Object Notation) é um formato leve de troca de dados, legível por humanos e fácil de processar por máquinas.

{
  "nome": "Maria Silva",
  "idade": 32,
  "email": "[email protected]",
  "ativo": true,
  "saldo": null,
  "telefones": ["11999999999", "11888888888"],
  "endereco": {
    "rua": "Av. Paulista",
    "numero": 1000,
    "cidade": "São Paulo"
  }
}

Tipos JSON

TipoExemploDescrição
string"Olá mundo"Sequência de caracteres Unicode entre aspas duplas
number42, 3.14, -10, 1.5e10Inteiro ou decimal (sem aspas)
booleantrue, falseValor lógico
nullnullAusência de valor
array[1, 2, 3]Lista ordenada entre colchetes
object{"chave": "valor"}Coleção chave-valor entre chaves

Parsing em Múltiplas Linguagens

JavaScript

const dados = '{"nome": "João", "idade": 30}';

// Parse
const obj = JSON.parse(dados);
console.log(obj.nome); // João

// Stringify
const json = JSON.stringify(obj, null, 2);
console.log(json);

Python

import json

# Parse
with open('dados.json') as f:
    dados = json.load(f)
    print(dados['nome'])

# Stringify
objeto = {"nome": "João", "idade": 30}
json_str = json.dumps(objeto, indent=2, ensure_ascii=False)
print(json_str)

# Forçar encoding UTF-8 na saída
with open('saida.json', 'w', encoding='utf-8') as f:
    json.dump(objeto, f, indent=2, ensure_ascii=False)

Java

import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper mapper = new ObjectMapper();

// Parse JSON string para Map
Map<String, Object> dados = mapper.readValue(
    "{\"nome\": \"João\", \"idade\": 30}",
    Map.class);

// Parse JSON para objeto tipado
Pessoa pessoa = mapper.readValue(
    new File("pessoa.json"),
    Pessoa.class);

// Gerar JSON
String json = mapper.writerWithDefaultPrettyPrinter()
    .writeValueAsString(pessoa);

C#

using System.Text.Json;

// Parse
using JsonDocument doc = JsonDocument.Parse(
    "{\"nome\": \"João\", \"idade\": 30}");
JsonElement root = doc.RootElement;
string nome = root.GetProperty("nome").GetString();

// Serialize
var pessoa = new { Nome = "João", Idade = 30 };
string json = JsonSerializer.Serialize(pessoa,
    new JsonSerializerOptions { WriteIndented = true });

Validação com jsonlint

# Validar sintaxe JSON
echo '{"nome": "João", "idade": 30}' | jsonlint

# Validar arquivo com saída detalhada
jsonlint -v dados.json

# Validar recursivamente todos JSONs em um diretório
for f in *.json; do
  jsonlint -q "$f" && echo "$f: OK" || echo "$f: INVÁLIDO"
done

Diferenças vs XML

// JSON: mais compacto, parsing nativo em JS
{
  "produtos": [
    {"id": 1, "nome": "Notebook", "preco": 3500.00},
    {"id": 2, "nome": "Mouse", "preco": 50.00}
  ]
}
<!-- XML: mais verboso, suporte a namespaces, validação por schema -->
<produtos>
  <produto id="1">
    <nome>Notebook</nome>
    <preco>3500.00</preco>
  </produto>
  <produto id="2">
    <nome>Mouse</nome>
    <preco>50.00</preco>
  </produto>
</produtos>

Lab: Manipulação de JSON

# 1. Criar arquivo JSON
cat << 'EOF' > usuarios.json
{
  "usuarios": [
    {
      "id": 1,
      "nome": "Ana Costa",
      "email": "[email protected]",
      "idade": 28,
      "tags": ["admin", "desenvolvimento"]
    },
    {
      "id": 2,
      "nome": "Bruno Lima",
      "email": "[email protected]",
      "idade": 35,
      "tags": ["usuario"]
    }
  ],
  "total": 2
}
EOF

# 2. Validar com Python
python -c "
import json
with open('usuarios.json') as f:
    d = json.load(f)
    print(f'Total: {d[\"total\"]}')
    for u in d['usuarios']:
        print(f'{u[\"nome\"]} ({u[\"idade\"]} anos) - {u[\"email\"]}')
        if 'admin' in u['tags']:
            print(f'  → Administrador')
"

# 3. Converter CSV <-> JSON
python -c "
import json, csv, sys
# JSON para CSV
with open('usuarios.json') as f:
    dados = json.load(f)
with open('usuarios.csv', 'w', newline='') as f:
    w = csv.writer(f)
    w.writerow(['id', 'nome', 'email', 'idade'])
    for u in dados['usuarios']:
        w.writerow([u['id'], u['nome'], u['email'], u['idade']])
print('CSV gerado!')
"

JSON é o formato padrão de troca de dados na web moderna: compacto, rápido e universal.