📚 EVEDAYS Guide Book
[Ferramentas para desenvolvedores]•6 min de leitura

Cinco motivos para o JSON falhar no parse e a armadilha dos números grandes

1. JSON é mais rigoroso do que parece


JSON se parece com um literal de objeto JavaScript, mas permite muito menos. Ele é definido pela RFC 8259 e pela ECMA-404, e muita coisa válida em JavaScript é inválida em JSON.

2. Cinco motivos para o parse falhar


① Vírgula final
{"a": 1, "b": 2,} — uma vírgula depois do último membro é erro. JavaScript aceita; JSON não.

② Chaves sem aspas
{a: 1} — as chaves precisam ser strings entre aspas duplas.

③ Aspas simples
{'a': 'b'} — JSON só reconhece aspas duplas.

④ Comentários
Nem // nota nem /* */ existem no JSON padrão. Arquivos de configuração que precisam de comentários devem usar uma extensão como JSONC ou JSON5.

⑤ Valores especiais
NaN, Infinity e undefined não são JSON. Represente um número ausente como null ou como string.

Outro erro comum é uma quebra de linha literal dentro de uma string; ela precisa ser escapada como \n.

3. Lendo a posição do erro


Os parsers costumam informar algo como "position 42", mas a causa real geralmente está antes. Uma única aspa faltando faz o parser engolir o resto do documento como parte de uma string até falhar muito depois.

Passar o documento por um formatador para expandir a estrutura torna fácil enxergar o aninhamento desencontrado.

4. A armadilha dos números grandes


Isso não é um erro de sintaxe, e sim uma mudança silenciosa de valor, o que o torna mais perigoso.

Os números do JavaScript são pontos flutuantes de precisão dupla, então os inteiros só são representados com exatidão até:

Number.MAX_SAFE_INTEGER = 9007199254740991

Fazer o parse de um inteiro maior com JSON.parse altera o valor sem aviso. Por exemplo, 12345678901234567890 vira 12345678901234567000, sem erro e sem alerta.

Quando isso pega você
  • IDs de 64 bits no estilo Snowflake (Twitter, Discord e similares)

  • Chaves primárias BIGINT de um banco de dados

  • Valores monetários grandes expressos na menor unidade


  • A solução
    O remédio padrão é o servidor serializar esses valores como strings: {"id": "12345678901234567890"}. Se o cliente precisar tratá-los como números, use BigInt com um reviver personalizado.

    5. Variantes de JSON


    | Formato | Diferença | Usado em |
    |---|---|---|
    | JSON | O padrão | Respostas de API, troca de dados |
    | JSONC | Permite comentários | Configurações do VS Code e similares |
    | JSON5 | Comentários, vírgulas finais, aspas simples | Arquivos de configuração escritos à mão |
    | NDJSON / JSON Lines | Um valor JSON por linha | Logs, streaming, processamento em lote |

    Não retorne JSONC de uma API só porque funciona em um arquivo de configuração; parsers padrão vão rejeitá-lo.

    6. Uma observação de segurança


    Ainda aparece de vez em quando código que passa uma string JSON por eval(). Nunca faça isso. Uma entrada não confiável que contenha código será executada como código. JSON.parse é seguro.

    7. Ferramenta


    O Formatador de JSON EVEDAYS valida e formata dentro do seu navegador. Respostas de API frequentemente contêm dados pessoais ou tokens, então uma ferramenta que nunca os transmite é a escolha mais segura.

    8. Fontes


  • RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format

  • ECMA-404 — The JSON Data Interchange Syntax

  • MDN — JSON.parse()
  • EVEDAYS Editorial Team