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
| Tipo | Exemplo | Descrição |
|---|---|---|
| string | "Olá mundo" | Sequência de caracteres Unicode entre aspas duplas |
| number | 42, 3.14, -10, 1.5e10 | Inteiro ou decimal (sem aspas) |
| boolean | true, false | Valor lógico |
| null | null | Ausê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.