Formatador e Validador de JSON

Formate, valide e minifique JSON sem que um número grande mude de valor nem uma chave repetida desapareça. O erro vem com a linha e a coluna. Tudo no seu navegador.

Revisão técnica: Cesar Gargiulo (segurança da informação)
Valim, o mascote do ValorFinal, representando a categoria Tecnologia
Exemplos

Exemplo carregado: clique no campo e cole o seu JSON, que ele substitui o exemplo. 181 de 1.000.000 caracteres. O resultado acompanha a digitação.

Tudo no seu navegador. O JSON não é enviado para servidor, não entra em log e não aparece na URL. A leitura não usa eval nem executa o conteúdo.

JSON válido

{
  "pedido": {
    "id": "a3f1",
    "itens": [
      {
        "sku": "CAF-500",
        "qtd": 2,
        "preco": 34.9
      },
      {
        "sku": "FIL-100",
        "qtd": 1,
        "preco": 12.5
      }
    ],
    "entrega": {
      "cep": "01310-100",
      "prazoDias": 3
    },
    "pago": true,
    "cupom": null
  }
}
Indentação
Chave repetida
Caracteres
181
Objetos
5
Arrays
1
Chaves
14
Textos
4
Números
5
Booleanos
1
Profundidade
4

Em resumo

O formatador valida, formata e minifica JSON no seu navegador e aponta o erro pela linha e pela coluna. Ele não passa o texto pelo JSON.parse, e isso muda o resultado quando há número grande. O tipo numérico do JavaScript só garante inteiro exato até 9.007.199.254.740.991, que é 2 elevado a 53, menos 1. No exemplo Número grande demais, o identificador 9007199254740993 sairia de um formatador comum como 9007199254740992, sem aviso. Aqui ele sai como entrou, e a página avisa que o valor não sobreviveria à conversão. A RFC 8259, de dezembro de 2017, que define o formato, diz que os leitores de JSON só concordam sobre o valor exato de um inteiro dentro desse limite.

O editor aceita até 1.000.000 caracteres e 500 níveis de aninhamento. Até 60.000 caracteres, o resultado acompanha a digitação; acima disso, sai no clique, para a aba não travar. Chave repetida continua no documento, com a linha de cada ocorrência, a menos que você escolha ficar com a primeira ou com a última. As chaves só mudam de ordem se você marcar essa opção.

Outras ferramentas de dados e formatos

  • Conversor de dadosConverta CSV, JSON, YAML e XML sem perder dado: CPF com zero na frente e número grande continuam inteiros, e toda transformação é avisada. Tudo no seu navegador.
  • CSV para JSONCole o CSV e receba o JSON no navegador, com o delimitador reconhecido sozinho, com ou sem cabeçalho, prévia em tabela e download local. CPF com zero à frente e número grande continuam intactos.
  • Codificador Base64Codifique texto para Base64 ou decodifique Base64 para texto diretamente no navegador. Suporte completo a UTF-8, emojis e caracteres acentuados. Processamento 100% local.
  • Codificar e decodificar URLCodifique, decodifique e analise URLs completas no navegador. Separa protocolo, host, porta, caminho, query string e fragmento. Usa APIs nativas, processamento 100% local, sem fetch externo.
  • Conversor de timestamp UnixConverta Timestamp Unix para data/hora legível ou vice-versa. Suporte a segundos e milissegundos. Exibe ISO 8601, UTC, data e hora local. Processamento 100% local no navegador.
  • Conversor binário, decimal e hexadecimalConverta números entre decimal, binário, hexadecimal e octal instantaneamente. Informe o valor e a base de origem e veja todas as representações em paralelo. Processamento 100% local.

Todas as ferramentas, por tarefa, estão em ferramentas de tecnologia online.

Gostou? Mostre pra todo mundo

Gere um card bonito com a marca do ValorFinal para postar nos Stories ou mandar no WhatsApp. Nada que você digitou aparece no card.

Coloque no seu site

Cole o JSON no editor e o resultado aparece embaixo, formatado ou minificado, com os erros apontados por linha e coluna. O número, o texto e a ordem das chaves saem exatamente como entraram. O JSON não é enviado para servidor.

Como funciona a ferramenta

A leitura é feita por um analisador próprio que segue a gramática da RFC 8259. Ele monta uma árvore que guarda o número como ele foi escrito, o texto com as escapadas originais e a ordem das chaves, inclusive quando a mesma chave aparece duas vezes. Escrever de volta mexe apenas no espaço em branco.

Por que não usamos JSON.parse. Um formatador existe para organizar o espaço. Se ele também troca o valor, deixou de ser formatador. O caminho comum, JSON.parse seguido de JSON.stringify, converte todo número para o tipo numérico do JavaScript, que segue o padrão IEEE 754 de dupla precisão e só representa inteiro exato até 253-1. Acima disso o dígito se perde sem nenhum aviso, e é assim que um identificador de pedido volta diferente do que entrou. O mesmo caminho descarta a primeira ocorrência de uma chave repetida.

Não há cálculo: há leitura e reescrita. As quatro operações são separadas de propósito, e só as duas do meio são seguras por definição:

  • Validar responde se o texto é JSON, e onde ele deixa de ser.
  • Formatar e minificar mexem apenas no espaço em branco.
  • Transformar (ordenar as chaves, resolver chave repetida) muda o documento, e por isso é sempre uma escolha explícita de quem usa.

Para comparar dois JSON linha a linha, use o comparador de texto; para converter entre JSON, CSV, YAML e XML, o conversor de dados; para ler o conteúdo de um token, o decodificador de JWT.

Método

Number.MAX_SAFE_INTEGER = 2^53 - 1 = 9.007.199.254.740.991

JSON.parse lê 9007199254740993 como 9007199254740992

Base: RFC 8259 (o formato JSON), ECMA-404 e a definição de IEEE 754 de dupla precisão, que é a origem do limite de 2 elevado a 53. Leitura e escrita feitas por analisador próprio, no navegador.

Limitações

  • Um milhão de caracteres e quinhentos níveis de aninhamento. Acima disso a ferramenta recusa com mensagem, em vez de travar a aba.
  • A ferramenta valida a sintaxe, não o significado. Ela não confere JSON Schema, tipos esperados nem campos obrigatórios do seu sistema.
  • Ordenar as chaves e resolver chave repetida mudam o documento. São opções, e a página diz quando foram usadas.
  • A preservação vale dentro desta página. Se o JSON seguir para uma ferramenta que use JSON.parse, o número grande volta a se perder lá.

Guia completo

O que é JSON: estrutura, tipos e erros comuns

Entenda o que é JSON, os tipos de dados (objeto, array, string, número, boolean e null), a diferença entre JSON válido e objeto JavaScript, os erros de sintaxe mais comuns e por que validar antes de usar em uma API.

Coloque esta ferramenta no seu site, de graça

Tem site, blog ou loja virtual? Esta ferramenta tem uma versão para incorporar: você copia um código e cola no seu HTML. Sem cadastro, sem mensalidade e sem limite de acessos, e ela roda no navegador de quem visita o seu site.

Formatador de JSON para sitever todas as ferramentas para site

Calculadoras relacionadas

Guias sobre este tema

ValorFinal VIP: Sem anúncios, até 500 cenários salvos e comparação de cenários lado a lado.

Ferramenta transparente, com o método explicado

Atualizado em . Fontes: ECMA-404 / JSON.org / MDN Web Docs.

Processamento local: esta ferramenta roda no seu navegador e nada é enviado a servidores automaticamente.

Como validamos

Referências técnicas

Links externos para o que foi consultado na construção desta página, com a natureza de cada fonte identificada. O conteúdo delas pode mudar sem aviso; em caso de divergência, vale sempre a fonte primária.

Incorpore esta calculadora no seu site (grátis)

Copie e cole o código no seu site. A calculadora se atualiza sozinha. O crédito ao ValorFinal vem junto do código e a gente agradece quem mantém, mas ele é opcional: pode remover sem perder o widget. O link sai com rel="nofollow", ou seja, não transfere autoridade de busca para a gente.

Perguntas frequentes

O que é JSON?

JSON (JavaScript Object Notation) é um formato de troca de dados em texto, fácil de ler por gente e fácil de interpretar por máquina. É o formato mais usado em API REST, em arquivo de configuração e em comunicação entre sistemas. A gramática está na RFC 8259 e na ECMA-404, e não depende de nenhuma linguagem de programação. Um exemplo mínimo é {"nome":"Ana","idade":30}: um objeto com duas chaves, uma com texto e outra com número.

Como formatar JSON online?

Cole o texto no campo "Seu JSON". O resultado aparece embaixo enquanto você digita, já indentado com 2 espaços; para usar 4 ou 8, troque no seletor "Indentação". O botão Minificado tira todo espaço que não é obrigatório e deixa o documento numa linha só, o jeito mais compacto de mandá-lo numa requisição. Copiar leva o texto para a área de transferência e Baixar salva um arquivo .json. Se o texto tiver erro, no lugar do resultado aparece a linha e a coluna do problema, com a linha inteira e uma seta embaixo do caractere.

Esta ferramenta altera os meus números?

Não, e essa é a diferença dela. A maioria dos formatadores de JSON lê o texto com JSON.parse e escreve de volta com JSON.stringify. Esse caminho converte todo número para o tipo numérico do JavaScript, que só garante inteiro exato até 9.007.199.254.740.991. Um identificador como 9007199254740993 entra e sai 9007199254740992, em silêncio. Aqui o número é guardado como você escreveu, letra por letra, e devolvido igual. Quando o valor for um desses que não sobreviveria à conversão, a página avisa, para você saber que o problema existe nas outras ferramentas da sua esteira.

O que acontece se a mesma chave aparecer duas vezes?

A RFC 8259 diz que as chaves de um objeto deveriam ser únicas, mas não proíbe a repetição, e cada leitor resolve do seu jeito: o do JavaScript fica com a última e descarta a primeira sem avisar. Aqui as duas são preservadas por padrão, e a página mostra em que linha cada uma está. Você pode escolher ficar com a primeira ou com a última, mas é uma escolha explícita sua, nunca um efeito colateral de formatar.

Por que meu JSON é considerado inválido?

Os erros mais comuns são vírgula sobrando no fim de um objeto ou de um array, aspas simples no lugar de aspas duplas, chave sem aspas, texto que não foi fechado, comentário (JSON não tem comentário), undefined ou NaN (JSON não tem nenhum dos dois, só null), zero à esquerda em número e quebra de linha solta dentro de um texto. A mensagem de erro aqui mostra a linha, a coluna e a linha inteira onde o problema está, com uma seta apontando a posição.

Qual é a diferença entre JSON formatado e JSON minificado?

Só o espaço em branco. O formatado usa indentação e quebra de linha para você ler; o minificado tira tudo o que não é obrigatório, para o arquivo ficar menor na hora de trafegar. No exemplo Pedido de API, que abre a página, a versão formatada com 2 espaços tem 333 caracteres e a minificada, 181. Os dois representam exatamente o mesmo documento, e nesta ferramenta os dois preservam o número, o texto e a ordem das chaves como estavam.

Esta ferramenta usa eval para processar o JSON?

Não. Ela não usa eval, não usa Function e também não usa JSON.parse: a leitura é feita por um analisador próprio, escrito para seguir a gramática da RFC 8259 e para preservar o documento. O conteúdo que você cola nunca é executado como código; ele é lido caractere por caractere como texto.

Meu JSON com dados sensíveis é enviado para algum servidor?

Não. Todo o processamento acontece no seu navegador. O JSON não é enviado para o ValorFinal nem para terceiros, não entra na URL, não vai para log e não é gravado no aparelho. Dá para conferir: desconecte a internet e a ferramenta continua funcionando. Na aba de rede do navegador, nenhuma requisição leva o texto que você colou. A única que a ferramenta dispara é o registro de uso da estatística do site, uma vez, quando sai o primeiro resultado do que você colou, com o endereço da página e nada do conteúdo.

Existe limite de tamanho?

Sim, um milhão de caracteres e quinhentos níveis de aninhamento. Os dois limites existem para a aba do navegador não travar nem estourar a pilha, e os dois avisam quando são atingidos, em vez de cortar o resultado calado. Até sessenta mil caracteres o resultado acompanha a digitação; acima disso ele sai no clique, porque reprocessar um arquivo grande a cada tecla congela a página.

O que significa a profundidade máxima?

É o contador "Profundidade", embaixo do resultado: o nível de aninhamento mais fundo da estrutura. Em {"a":{"b":{"c":1}}} a profundidade é 3, porque o número 1 está dentro de três objetos. JSON com centenas de níveis costuma indicar um desenho de dados que daria para simplificar, e derruba alguns leitores por estouro de pilha. Esta página aceita até 500 níveis e, acima disso, recusa com mensagem em vez de travar a aba.

O que significa "Unexpected token in JSON at position"?

É a mensagem do JSON.parse, o leitor de JSON do JavaScript, quando ele encontra um caractere que a gramática não permite. O número depois de position é o índice desse caractere, contado a partir de zero. A versão mais famosa, Unexpected token < in JSON at position 0, costuma indicar que a resposta veio em HTML, como uma página de erro do servidor. No Node 24, a entrada {"a":1,} dá Expected double-quoted property name in JSON at position 7 (line 1 column 8). Aqui a mesma entrada aponta linha 1, coluna 8: Vírgula sobrando antes de }. JSON não aceita vírgula no fim da lista.

O que é a caixa "O que este JSON tem de delicado"?

É o aviso amarelo que aparece quando o JSON é válido, mas tem algo que outra ferramenta estragaria. Ele aponta dois casos. Um é a chave repetida no mesmo objeto, com as linhas em que ela aparece. O outro é o número inteiro grande demais para o tipo numérico do JavaScript, com o valor que ele viraria: 9007199254740993 vira 9007199254740992. O número continua intacto no resultado desta página, e a chave repetida também, a menos que você escolha ficar com a primeira ou a última. O aviso existe porque o problema vai aparecer no próximo sistema que ler esse JSON com JSON.parse.