← Todos os artigos

Como formatar JSON: pretty-print, validar e limpar arquivos JSON

Formate JSON com JSON.stringify em JavaScript, json.dumps em Python, jq na linha de comando ou instantaneamente no seu navegador. Inclui ordenar chaves, converter YAML e CSV para JSON e exemplos reais de antes/depois.

JSON cru vindo de uma API ou de um arquivo de log costuma chegar em uma única linha ininterrupta —— válido, mas impossível de ler de relance. Formatar JSON (também chamado de „pretty-print“ ou „embelezar“) adiciona indentação consistente e quebras de linha para que a estrutura fique imediatamente clara. Este guia mostra como formatar um arquivo ou string JSON em JavaScript, Python, na linha de comando e diretamente no navegador.

O que significa „formatar JSON“?

Um formatador de JSON pega uma string JSON compacta ou com indentação inconsistente e reescreve com:

  • Cada par chave–valor em sua própria linha
  • Objetos e arrays aninhados com um número fixo de espaços (normalmente 2 ou 4)
  • Sem espaços no fim das linhas
// Antes de formatar (minificado)
{"user":{"name":"Alice","age":30,"roles":["admin","editor"]}}

// Depois de formatar (2 espaços)
{
  "user": {
    "name": "Alice",
    "age": 30,
    "roles": [
      "admin",
      "editor"
    ]
  }
}

As duas formas são semanticamente idênticas —— qualquer parser de JSON produz a mesma estrutura de dados a partir de qualquer uma delas. Formatar é puramente para legibilidade humana.

Como formatar JSON em JavaScript

JSON.stringify() aceita um segundo argumento (um replacer) e um terceiro (o nível de indentação). Passe null como replacer e 2 para 2 espaços de indentação (a API completa em Como fazer Stringify de JSON):

const obj = { user: { name: "Alice", age: 30, roles: ["admin", "editor"] } };

// Compacto (sem formatação)
JSON.stringify(obj);

// Embelezado com 2 espaços
JSON.stringify(obj, null, 2);

// 4 espaços
JSON.stringify(obj, null, 4);

// Tabulado
JSON.stringify(obj, null, '\t');

Formatar uma string JSON (não um objeto)

Se você já tem uma string JSON válida, mas mal formatada, faça parse primeiro e stringify de novo:

const raw = '{"name":"Alice","age":30}';
const formatted = JSON.stringify(JSON.parse(raw), null, 2);
console.log(formatted);

Ordenar chaves em ordem alfabética

Para ordenar chaves do objeto ao formatar, passe uma função replacer que ordene as chaves de cada objeto encontrado:

function sortedStringify(obj, indent = 2) {
  return JSON.stringify(obj, (key, value) => {
    if (value && typeof value === 'object' && !Array.isArray(value)) {
      return Object.keys(value).sort().reduce((acc, k) => {
        acc[k] = value[k];
        return acc;
      }, {});
    }
    return value;
  }, indent);
}

Como formatar JSON em Python

O módulo embutido json do Python cuida da formatação com o parâmetro indent:

import json

# Formatar um dict Python
data = {"user": {"name": "Alice", "age": 30, "roles": ["admin", "editor"]}}
formatted = json.dumps(data, indent=2)
print(formatted)

# Formatar uma string JSON
raw = '{"name":"Alice","age":30}'
formatted = json.dumps(json.loads(raw), indent=2)

# Ordenar chaves
formatted = json.dumps(data, indent=2, sort_keys=True)

# Formatar um arquivo JSON
with open('input.json') as f:
    data = json.load(f)
with open('output.json', 'w') as f:
    json.dump(data, f, indent=2)

Como formatar um arquivo JSON na linha de comando

Usando jq (recomendado)

jq é o processador JSON padrão da linha de comando. Por padrão ele já formata o JSON:

# Embeleza um arquivo JSON
jq . input.json

# Embeleza e salva em outro arquivo
jq . input.json > output.json

# Formata a resposta do curl
curl -s https://api.example.com/users | jq .

# Ordena as chaves
jq --sort-keys . input.json

Usando Python (sem instalar nada)

O módulo json.tool do Python funciona como formatador de linha de comando em qualquer sistema com Python:

# Formata um arquivo
python3 -m json.tool input.json

# Da entrada padrão
echo '{"name":"Alice","age":30}' | python3 -m json.tool

# Ordena chaves
python3 -m json.tool --sort-keys input.json

Usando Node.js

node -e "const fs=require('fs'); const d=JSON.parse(fs.readFileSync('input.json')); console.log(JSON.stringify(d,null,2))"

Como converter dados para o formato JSON

„Format to JSON“ geralmente significa serializar dados de outro formato —— um dict do Python, um arquivo CSV, uma configuração YAML —— para JSON válido.

De YAML para JSON

# Python
import yaml, json
with open('config.yaml') as f:
    data = yaml.safe_load(f)
print(json.dumps(data, indent=2))

Ou use o conversor YAML para JSON no seu navegador —— sem código. Para quando escolher cada formato, veja JSON vs YAML; para o contexto de por que o YAML 1.2 é um superconjunto próprio do JSON, veja Compatibilidade YAML 1.2 com JSON.

De CSV para JSON

import csv, json
with open('data.csv') as f:
    rows = list(csv.DictReader(f))
print(json.dumps(rows, indent=2))

De um objeto JavaScript

Objetos JavaScript parecem JSON, mas não são —— podem ter chaves sem aspas, strings com aspas simples, vírgulas finais e comentários. Cole um literal de objeto JavaScript inválido no JSON Fix para convertê-lo automaticamente em JSON válido.

Formatar JSON no editor (Prettier, VS Code, pre-commit)

No dia a dia, o melhor momento para formatar JSON é ao salvar —— assim ele nunca chega sem formatação ao git ou a um PR.

Prettier

# instalar
npm i -D prettier

# formata in-place cada .json (e fonte)
npx prettier --write "**/*.{json,jsonc}"

# só checar (amigável a CI, sai com código != 0 se algo precisa de formatação)
npx prettier --check "**/*.json"

Prettier suporta JSON e JSONC out of the box. Um .prettierrc de duas linhas como { "tabWidth": 2 } costuma bastar.

VS Code —— Format on Save

Instale a extensão Prettier e adicione ao settings.json do workspace:

{
  "editor.formatOnSave": true,
  "[json]":   { "editor.defaultFormatter": "esbenp.prettier-vscode" },
  "[jsonc]":  { "editor.defaultFormatter": "esbenp.prettier-vscode" }
}

Hook pre-commit

Para impedir que JSON sem formatação seja commitado, conecte lint-staged + husky:

// package.json
{
  "lint-staged": { "*.{json,jsonc}": "prettier --write" }
}

# instala o hook
npx husky add .husky/pre-commit "npx lint-staged"

Exemplo de formato JSON: antes e depois

// Sem formatação —— válido, mas ilegível
{"orders":[{"id":1001,"customer":{"name":"Alice"},"items":[{"sku":"A1","qty":2}]}]}

// Formatado
{
  "orders": [
    {
      "id": 1001,
      "customer": { "name": "Alice" },
      "items": [ { "sku": "A1", "qty": 2 } ]
    }
  ]
}

Perguntas frequentes

Como formato JSON em JavaScript?

Use JSON.stringify(value, null, 2) —— o terceiro argumento define a indentação (2 espaços, 4 espaços ou '\t' para tabulações). Para formatar uma string JSON já existente, faça parse primeiro: JSON.stringify(JSON.parse(raw), null, 2).

Como faço pretty-print de JSON na linha de comando?

Use jq . file.json (formata por padrão) ou python3 -m json.tool file.json se não tiver jq. Adicione --sort-keys para ordenar as chaves alfabeticamente.

Qual a diferença entre formatar e minificar JSON?

Formatar adiciona espaços para melhorar a leitura; minificar os remove para reduzir o tamanho. São opostos exatos e ambos preservam os dados. Veja Como minificar JSON.

Formatar JSON muda os dados?

Não. Indentação e quebras de linha são espaços em branco sem significado em JSON —— qualquer parser produz a mesma estrutura de dados a partir de entrada compacta ou embelezada.

Formate JSON online —— sem instalação

Se você precisa formatar uma string JSON agora sem escrever código, o JSON Fix formata seu JSON instantaneamente. Cole o JSON, clique em Format e copie o resultado. Ele também repara erros comuns (vírgulas finais, aspas simples, chaves sem aspas) antes de formatar, então funciona mesmo se seu JSON ainda não for válido.