Formate uma resposta de API JSON minificada com indentação correta. Regras de indentação, uso de jq, compensações de minificação e erros de sintaxe comuns.
Carregando editor...
Carregando editor...
Aplicar um formatador à entrada minificada produz:
{
"status": "success",
"data": {
"users": [
{
"id": 1,
"name": "Alice Chen",
"email": "alice@example.com",
"role": "admin",
"created_at": "2024-01-15T08:30:00Z"
},
{
"id": 2,
"name": "Bob Martinez",
"email": "bob@example.com",
"role": "editor",
"created_at": "2024-03-22T14:15:00Z"
},
{
"id": 3,
"name": "Carol Williams",
"email": "carol@example.com",
"role": "viewer",
"created_at": "2024-06-10T11:45:00Z"
}
],
"total": 3,
"page": 1,
"per_page": 25
},
"meta": {
"request_id": "req_abc123",
"response_time_ms": 42
}
}
A estrutura é imediatamente legível: um envelope de sucessó contendo uma lista paginada de usuários mais metadados da requisição.
Quando você usa curl para consultar uma API e recebe um muro de JSON minificado, a primeira coisa que faz é passá-lo por um formatador. A razão é prática: estruturas aninhadas são invisíveis em uma única linha. Sem indentação, você não pode escanear uma chave faltante, notar um valor null ou verificar o comprimento de um array.
O JSON formatado torna várias tarefas de depuração muito mais rápidas:
O exemplo acima segue um padrão amplamente usado: um campo status no nível superior, um objeto data contendo o payload real é um objeto meta com informações de nível de requisição. Variações deste padrão aparecem constantemente:
{
"status": "success",
"data": { ... }
}
{
"data": [ ... ],
"links": { "next": "...", "self": "..." },
"meta": { "total": 42 }
}
{
"status": "error",
"code": "RESOURCE_NOT_FOUND",
"mensagem": "User 99 does not exist",
"request_id": "req_xyz789"
}
Formatar qualquer um destes torna a estrutura do envelope imediatamente óbvia, o que ajuda quando você está escrevendo um cliente e precisa entender qual caminho percorrer para alcançar os dados desejados.
As duas escolhas dominantes são 2 espaços e 4 espaços. Tabulações também são espaço em branco JSON válido mas menos comuns em configuração compartilhada.
2 espaços é o padrão em muitas ferramentas JavaScript. JSON.stringify(obj, null, 2) e jq ambos produzem saída de 2 espaços. Mantém estruturas aninhadas compactas, o que importa se você trabalha rotineiramente com JSON profundamente aninhado.
4 espaços é a convenção Python. json.dumps(obj, indent=4) é o snippet Python mais comum que você encontrará. Também é o padrão em muitos formatadores de IDE.
Escolha com base no que sua equipe já usa. Se você tem um .editorconfig ou uma configuração Prettier de nível de projeto, ela já específica o tamanho da indentação. Use isso. Não misture larguras de indentação no mesmo arquivo ou no mesmo repositório.
jq é a ferramenta padrão para formatação e consulta de JSON na linha de comando. Instale uma vez (brew install jq ou apt install jq) e você a usará constantemente.
Formatar uma string bruta:
echo '{"name":"Alice","role":"admin"}' | jq .
Formatar um arquivo:
jq . response.json
Formatar uma resposta curl inline:
curl -s https://api.example.com/users | jq .
Extrair um valor aninhado enquanto formata a resposta:
curl -s https://api.example.com/users | jq '.data.users[0].email'
Se jq não estiver disponível, a biblioteca padrão do Python cobre o casó básico:
echo '{"name":"Alice"}' | python3 -m json.tool
Ou, usando Node.js:
node -e "let d=''; process.stdin.on('data', c => d+=c); process.stdin.on('end', () => console.log(JSON.stringify(JSON.parse(d), null, 2)))" < file.json
Um formatador que analisa JSON antes de re-emiti-lo também válida a entrada. Se seu JSON tem um erro de sintaxe (uma vírgula final, uma chave sem aspas, um parêntese faltante), o formatador o pegará e mostrará onde a análise falhou. Isso é um ciclo de feedback mais rápido que implantar código e esperar por um erro de análise JSON em tempo de execução.
Erros comuns de sintaxe JSON:
{name: "Alice"} é JavaScript, não JSON.// ou /* */ causarão falha de análise.Se você precisa de um formato similar a JSON com comentários e vírgulas finais, veja JSON5 ou JSONC, mas esteja ciente que analisadores JSON padrão os rejeitarão.
Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.