Formatador e validador de JSON

Roda no seu navegador; nada é enviado

Formate, valide e minifique JSON. Os erros apontam a linha e a coluna exatas.

Input

Formatted JSON appears here as you type.

Ready
Ln 1, Col 1

O que o formatador faz

JSON é o formato que a maioria das APIs web usa no corpo das requisições e respostas. Os servidores costumam enviá-lo minificado, sem espaços nem quebras de linha, o que é compacto mas difícil de ler. Formatar (pretty-print) adiciona indentação para você ver quais chaves pertencem a qual objeto; minificar remove de novo.

Para formatar JSON a ferramenta precisa fazer o parse, então formatar também valida. Se o texto não for JSON válido, você vê a linha e a coluna onde o parse parou, o que era esperado ali e a causa mais comum. Comentários, vírgulas sobrando no final, aspas simples, chaves sem aspas e o True/None do Python podem ser corrigidos para você: a ferramenta lista cada alteração antes e não aplica nada até você confirmar.

Aqui, formatar nunca altera um valor. A ferramenta usa um parser próprio em vez de JSON.parse, então os números mantêm os dígitos com que foram escritos (12345678901234567890 e 1.50 ficam como estão), escapes como \u00e9 continuam sendo escapes e chaves duplicadas ficam onde estavam. Quando um documento tem dados que o JSON.parse alteraria, como inteiros acima de 2^53 ou uma chave que aparece duas vezes, o Inspector lista isso em Data warnings.

Como usar esta ferramenta

  1. 1Cole JSON no painel Input, arraste um arquivo .json para ele ou pressione Ctrl+O para abrir um (até 5 MB). Em Examples há amostras para testar.
  2. 2A aba Output mostra o resultado enquanto você digita. Escolha a indentação (2 espaços, 4 espaços ou tabs), ordene as chaves ou alterne entre Pretty e Minified. As setas na margem recolhem objetos e arrays.
  3. 3Para reescrever a própria entrada, use Format (Shift+Alt+F) ou Minify (Shift+Alt+M). Ctrl+Z desfaz qualquer um dos dois, assim como Clear e as correções aplicadas.
  4. 4Se o JSON for inválido, a barra de status e a aba Output mostram onde. Pressione F8 para colocar o cursor no erro, ou Review fixes para ver os reparos automáticos.
  5. 5Tree, Table, JSONPath e Compare mostram os mesmos dados de outras formas: selecione um nó da árvore para copiar o caminho ou o valor, consulte com uma expressão como $.items[?(@.price < 10)].id, ou cole um segundo documento para listar o que mudou.
  6. 6Copie a saída, ou baixe-a formatada ou minificada (Ctrl+S). Pressione ? para ver todos os atalhos de teclado.

Solução de problemas

Vírgula no final: remova a , antes do }
JSON não permite vírgula depois do último item de um objeto ou array. Apague-a ou use Review fixes. Ela costuma vir de código JavaScript ou de um arquivo de configuração escrito à mão.
Os nomes das propriedades precisam estar entre aspas duplas
O texto é um objeto literal de JavaScript ({name: 'x'}), não JSON. Toda chave e toda string precisam de aspas duplas. Review fixes adiciona as aspas.
True é Python; JSON usa true
Os dados foram impressos com print() ou str() do Python. Use json.dumps() para gerar JSON, ou deixe Review fixes trocar True, False e None.
Fim de entrada inesperado: o objeto aberto na linha 1 não foi fechado
O texto termina antes de todos os { e [ serem fechados. Provavelmente uma resposta copiada foi cortada; copie de novo, ou salve num arquivo e abra esse arquivo.
Conteúdo inesperado depois do valor JSON
Há dois ou mais valores JSON um depois do outro. Coloque-os dentro de um array ou, se forem logs em JSON delimitado por quebra de linha (NDJSON), verifique uma linha por vez.
O texto começa com um byte order mark (BOM)
O arquivo foi salvo como "UTF-8 com BOM". Muitos parsers rejeitam essa marca invisível no início. Salve como UTF-8 simples ou use Review fixes para removê-la.
Strings não podem ocupar várias linhas
Uma string contém uma quebra de linha real, muitas vezes por colar texto com quebras. Troque a quebra por \n.
Um número no seu código é diferente do que está no JSON
Inteiros acima de 9.007.199.254.740.991 perdem precisão quando o JavaScript faz o parse, então um ID de 19 dígitos pode mudar. Esta ferramenta mostra os dígitos como foram escritos e avisa sobre eles; na sua API, envie esses IDs como strings.

Perguntas frequentes

Meu JSON é enviado para algum lugar?

Não. O parse, a formatação e todas as visualizações rodam na aba do seu navegador. Para sobreviver a um reload, o que você cola fica no session storage desta aba até você limpar ou fechar a aba. Copy link coloca a entrada no link depois do #, parte que os navegadores nunca enviam a um servidor, mas qualquer pessoa que receber o link consegue ler. Suas configurações, como a indentação, ficam salvas neste navegador.

Formatar altera meus dados?

Não. Os valores são copiados exatamente como foram escritos, incluindo números grandes, escapes e chaves duplicadas. Duas opções mudam o texto de propósito: Sort keys reordena as chaves (pelo código do caractere, então maiúsculas vêm antes de minúsculas) e Minify remove os espaços fora das strings.

O que acontece com chaves duplicadas?

Elas são mantidas e mostradas como foram escritas, com um aviso. O padrão JSON não define o que fazer com chaves duplicadas; o JSON.parse e a maioria das bibliotecas ficam só com o último valor, então o código que ler este documento provavelmente verá apenas um deles. As visualizações Table, Compare e JSONPath seguem a mesma regra de que o último vence.

Qual sintaxe de JSONPath é suportada?

A sintaxe comum de Goessner: $ para a raiz, .key e ['key'], índices (inclusive negativos), [*] e .. para busca recursiva, uniões como [0,2], fatias como [1:3] e filtros como [?(@.price < 10 && @.inStock)]. Os filtros comparam números como números do JavaScript, então inteiros acima de 2^53 são comparados de forma aproximada.

Qual o tamanho máximo de arquivo?

Arquivos de até 5 MB abrem diretamente. Um documento de cerca de 4 MB leva uma fração de segundo para ser verificado e formatado num notebook comum; acima de uns 200 KB, a ferramenta espera uma pausa na digitação antes de verificar de novo. Aninhamento com mais de 2.000 níveis é informado como erro.