Analisar JSON
O inspetor JSON verifica a sintaxe RFC 8259 no navegador e informa contagens por tipo, profundidade e equivalências entre linguagens. Também mostra quais tokens numéricos originais mudariam ao serem convertidos para Number do JavaScript. A inspeção não altera o texto original; os conversores de valores rejeitam essas conversões inseguras.
Cole um documento JSON ou clique em “Carregar exemplo” para analisar sua estrutura.
Como funciona o Analisar JSON?
“Analisa?” é a pergunta que o validador responde. Esta ferramenta responde à seguinte, que costuma ser a mais interessante: no que ele se converteu? Um documento pode ser perfeitamente válido e ainda assim não ser aquilo que o seu código espera, e essa diferença raramente aparece numa simples leitura.
O parser é próprio e não chama JSON.parse. Uma pilha de trabalho explícita e iterativa permite inspecionar documentos profundamente aninhados sem estourar a pilha de chamadas. Conteúdo depois do valor raiz é rejeitado. Cada chave é atribuída com proteção como propriedade própria: __proto__ permanece uma chave normal em vez de alterar o protótipo do objeto.
Em seguida, a análise percorre o valor interpretado e conta o que está lá: quantos objetos, arrays, strings, números, booleanos e nulls, qual a profundidade do aninhamento e quantas chaves distintas aparecem. Isso, sozinho, costuma bastar para identificar o problema — um array que você esperava conter objetos e que só contém strings, uma estrutura três níveis mais profunda do que o schema permite, um documento que é 90% nulls porque um join a montante falhou.
JSON tem um único tipo numérico. JSON.parse do JavaScript o converte em double IEEE-754, que representa todos os inteiros exatamente apenas até 2^53−1. Por exemplo, 9007199254740993 vira 9007199254740992 sem erro de sintaxe nativo. Este inspetor verifica os tokens numéricos originais, incluindo decimais e expoentes, e sinaliza valores decimais alterados como riscos de conversão. Ele conta a estrutura sem exportar valores arredondados. O Formatador JSON e o Minificador JSON preservam os tokens originais; os conversores de valores rejeitam esses números inseguros.
A mesma tabela mostra o restante do mapeamento, porque as premissas variam conforme a linguagem. Go entrega float64 para todo número, a menos que você decodifique em uma struct tipada. Python distingue int de float e por isso mantém inteiros grandes exatos. Java e C# recorrem a BigDecimal ou decimal quando configurados para isso.
Documento
{ "id": 9007199254740993, "price": 0.1 }Estrutura e risco numérico
3 values · depth 1 · 2 distinct keys number 2 → number (IEEE-754 double) JavaScript Number conversion risk (source unchanged): 9007199254740993 → 9007199254740992
Documento → Estrutura e risco numérico
Documento
{
"id": 42,
"name": "Ada"
"active": true
}Estrutura e risco numérico
Missing comma between object key-value pairs. Line 4, column 3 "active": true ^
Quais opções e casos-limite o Analisar JSON suporta?
| Parâmetro | Tipo | Padrão | Comportamento e casos-limite |
|---|---|---|---|
| Gramática | RFC 8259 | estrito | Sem comentários, vírgulas finais, aspas simples, chaves sem aspas, NaN ou Infinity. Essas são regras de sintaxe JSON; uma API pode impor também seu próprio schema e limites de tamanho ou números. JSON5 e JSONC são rejeitados. |
| Conteúdo ao final | rejeitado | — | A RFC 8259 §2 define um documento como exatamente um valor. Dois objetos concatenados são um sintoma comum de uma linha de log que foi dividida incorretamente, e são reportados em vez de truncados silenciosamente no primeiro. |
| Precisão numérica | IEEE-754 | sinalizado | Os tokens numéricos originais são comparados com sua conversão decimal de ida e volta para Number do JavaScript. Inteiros e decimais alterados, estouros e valores reduzidos a zero são sinalizados. O texto original não muda e nenhum documento arredondado é exportado. |
| Chaves duplicadas | a última vence | — | A RFC 8259 deixa isso indefinido; quase todo parser mantém a última ocorrência, e este corresponde a isso. Vale a pena saber, porque é uma superfície de ataque real quando dois sistemas em uma cadeia discordam. |
| __proto__ | propriedade própria | — | Atribuído via defineProperty, então ele se torna uma chave normal em vez de re-apontar o protótipo. Corresponde ao JSON.parse, e é a proteção que a maioria dos parsers feitos à mão está perdendo. |
| Profundidade de aninhamento | iterativo | sem limite | O parser usa uma pilha explícita, então a profundidade é limitada pela memória e não pela pilha de chamadas. Um documento de 20,000 níveis é coberto por um teste. |
| Unicode | UTF-8 | — | escapes são decodificados, e pares substitutos são recombinados para que caracteres astrais sobrevivam. Um byte-order mark antes do root é reportado em vez de ser tratado como conteúdo. |
| Tamanho de entrada | bytes | 8 MB | Teto na thread principal. Acima disso, o parsing é recusado em vez de tentado. Nada é enviado em nenhum tamanho. |
Perguntas frequentes
Qual a diferença para o validador de JSON?
O validador se concentra em erros de sintaxe JSON e reparos. Este inspetor também informa contagens por tipo, profundidade, chaves distintas, equivalências entre linguagens e riscos de conversão numérica. Um JSON válido pode conter números que mudam ao serem convertidos por JavaScript; a inspeção mostra o token original e uma prévia Number claramente identificada sem mudar o documento.
Meu ID mudou de valor depois da análise. O que aconteceu?
JSON.parse nativo do JavaScript usa números IEEE-754 e pode arredondar IDs grandes sem erro de sintaxe: 9007199254740993 vira 9007199254740992. Este inspetor mostra o risco a partir do token original. Os conversores de valores do ToolsByUs rejeitam conversões que perderiam dígitos, enquanto o Formatador e o Minificador preservam o texto. Envie IDs exatos como strings ou use um parser com inteiros de precisão arbitrária, como o decodificador JSON padrão do Python.
O que acontece com chaves duplicadas?
A última ocorrência vence, que é o que quase todo parser faz e o que a RFC 8259 prefere não especificar. Vale saber disso em vez de ignorar: se dois sistemas em uma cadeia de requisições resolvem duplicatas de formas diferentes, uma carga pode ser validada segundo uma interpretação e executada sob outra, o que é uma classe genuína de falha de segurança.
Por que ele rejeita meu JSON com comentários?
Porque a RFC 8259 não tem comentários, e a razão de ser de um parser estrito é dizer o que uma API vai aceitar. Se o seu arquivo é uma configuração — tsconfig.json, .eslintrc.json — ele é JSONC, e o formatador de JSON aceita comentários e vírgulas finais e pode removê-los para você.
0.1 é exatamente 0.1 depois da análise?
Não, e isso não é um problema do JSON — é ponto flutuante binário. 0.1 não tem representação exata como double em nenhuma linguagem, razão pela qual 0.1 + 0.2 é famosamente diferente de 0.3. Para dinheiro, a resposta padrão é carregar unidades inteiras menores (pence, centavos) ou uma string decimal, nunca um float.
Meu documento é enviado a algum lugar?
Não. A análise ocorre no seu navegador sem enviar o documento. Depois que esta página e seus recursos forem carregados, a própria inspeção JSON funciona sem conexão de rede.