All Tools / Blog / Como Formatar e Validar JSON Online

Como Formatar e Validar JSON Online

3 min read

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 e json.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 de curl.
  • Os cinco erros mais comuns de JSON: vírgulas finais, aspas simples, chaves sem aspas, comentários e caracteres sem escape.
  • Use ensure_ascii=False em Python para manter o Unicode legível.
  • Ordene chaves com sort_keys=True / Object.keys().sort() para diffs mais limpos.