Como Formatar e Validar JSON Online
JSON minificado é ilegível. Um blob de linha única de uma resposta de API ou arquivo de configuração é impossível de depurar sem formatá-lo primeiro. Veja como formatar JSON instantaneamente, validar e corrigir os erros comuns que fazem os parsers falharem.
O que a formatação JSON faz
A formatação (também chamada de pretty-printing) pega isto:
{"name":"John Doe","age":30,"address":{"city":"New York","zip":"10001"},"tags":["developer","writer"]}
E produz isto:
{
"name": "John Doe",
"age": 30,
"address": {
"city": "New York",
"zip": "10001"
},
"tags": [
"developer",
"writer"
]
}
Mesmos dados, espaçamento diferente — o JSON é válido nas duas formas.
Formatação no navegador
Cole JSON minificado no formatador, clique em formatar e obtenha a saída indentada. A maioria dos formatadores também valida enquanto você digita, destacando a linha exata onde ocorre um erro de sintaxe. É o caminho mais rápido para depuração pontual.
Formatação em JavaScript
const minified = '{"name":"John Doe","age":30}';
const formatted = JSON.stringify(JSON.parse(minified), null, 2);
console.log(formatted);
JSON.stringify(value, replacer, space) — o terceiro argumento é o recuo. 2 dá recuo de 2 espaços; '\t' dá tabulações.
Para formatar um arquivo JSON no Node.js:
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('data.json', 'utf8'));
fs.writeFileSync('data.json', JSON.stringify(data, null, 2));
Formatação em Python
import json
minified = '{"name": "John Doe", "age": 30}'
formatted = json.dumps(json.loads(minified), indent=2)
print(formatted)
Formatar um arquivo no local:
import json
with open('data.json', 'r') as f:
data = json.load(f)
with open('data.json', 'w') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
ensure_ascii=False preserva caracteres Unicode (é, ñ, 你好) em vez de escapá-los para \uXXXX.
Linha de comando: jq
jq é um processador JSON de linha de comando. Formatar um arquivo:
# Instalar
brew install jq # macOS
sudo apt install jq # Ubuntu
# Pretty-print
jq . data.json
# Minificar
jq -c . data.json
# Formatar uma resposta de API via pipe
curl -s https://api.example.com/data | jq .
One-liner Python (sem instalação necessária):
python3 -m json.tool data.json
Erros comuns de JSON e como corrigi-los
Vírgula final:
{
"name": "John",
"age": 30, ← erro
}
JSON não permite vírgulas finais. Remova a última vírgula antes de } ou ].
Aspas simples em vez de aspas duplas:
{'name': 'John'} ← erro
JSON exige aspas duplas para todas as strings e chaves. Substitua ' por ".
Chaves sem aspas:
{name: "John"} ← erro
A sintaxe de literal de objeto JavaScript não é JSON válido. As chaves devem ter aspas: {"name": "John"}.
Comentários:
{
// Este é o objeto usuário
"name": "John"
}
JSON não suporta comentários. Remova-os, ou mude para o formato JSONC (JSON com Comentários) se sua ferramenta suportar.
Valores undefined ou NaN:
{"value": undefined} ← erro
{"value": NaN} ← erro
undefined, NaN e Infinity são valores JavaScript, não valores JSON. Substitua por null, 0 ou remova o campo.
Caracteres especiais sem escape em strings:
{"message": "He said "hello""} ← erro
Aspas duplas dentro de strings devem ter escape: {"message": "He said \"hello\""}.
Quebras de linha em strings também precisam de escape: \n, não uma quebra de linha literal.
Validação programática
function isValidJson(str) {
try {
JSON.parse(str);
return true;
} catch {
return false;
}
}
import json
def is_valid_json(s: str) -> bool:
try:
json.loads(s)
return True
except json.JSONDecodeError:
return False
Para uso em produção com mensagens de erro detalhadas, tanto JSON.parse (JS) quanto json.loads (Python) lançam exceções com a posição do erro.
Ordenando chaves
Chaves ordenadas alfabeticamente tornam as comparações de diff muito mais limpas no controle de versão:
const sorted = JSON.stringify(data, Object.keys(data).sort(), 2);
json.dumps(data, sort_keys=True, indent=2)
Pontos principais
JSON.stringify(data, null, 2)em JavaScript ejson.dumps(data, indent=2)em Python formatam qualquer objeto.jq .é o formatador de linha de comando mais rápido — funciona muito bem com saída decurl.- Os cinco erros mais comuns de JSON: vírgulas finais, aspas simples, chaves sem aspas, comentários e caracteres sem escape.
- Use
ensure_ascii=Falseem Python para manter o Unicode legível. - Ordene chaves com
sort_keys=True/Object.keys().sort()para diffs mais limpos.