JSON5 vs JSON
O rigor do JSON é a funcionalidade: a RFC 8259 é o motivo de todo parser do planeta concordar. O JSON5 troca parte dessa universalidade por conforto humano — comentários, chaves sem aspas, aspas simples, vírgulas finais, números hexadecimais. Mantenha JSON para tudo que um programa lê; permita JSON5 apenas em arquivos de configuração que todo consumidor faça o parse com a mesma biblioteca.
JSON5 vs JSON: explicação
Todo arquivo JSON que já irritou uma pessoa o faz do mesmo jeito: você não consegue explicar por que um campo existe, não consegue desabilitar temporariamente um bloco, e remover a última vírgula é um trabalhão que o parser poderia perdoar. O JSON5 é a resposta da comunidade — um superconjunto estrito do JSON, modelado na sintaxe do ECMAScript 5, que adiciona comentários, relaxa as aspas e tolera vírgulas finais, além de algumas conveniências numéricas. JSON válido é sempre JSON5 válido; o inverso nunca é verdade.
A especificação vive em json5.org e não em nenhum documento da IETF, e essa posição é o resumo honesto da troca. A gramática da RFC 8259 é o que garante que um payload escrito em Tóquio faça parse de modo idêntico em Toronto — uma página de regras, sem dialetos. O JSON5 reintroduz a pergunta que o JSON estrito nunca faz: qual parser, e qual versão dele? Os navegadores trazem o JSON.parse e nada mais, então JSON5 sempre significa uma dependência.
Por isso, na prática, a divisão é limpa: JSON para a transmissão e tudo que é armazenado, JSON5 para configuração mantida por pessoas, onde uma dependência de parser é um custo único e os comentários se pagam. Esta página percorre o que o JSON5 adiciona, o que custa e onde fica a linha — com as ferramentas JSON locais do site prontas para conferir qualquer um dos lados.
Quer saber onde seu arquivo fica na linha do rigor? O Validador de JSON faz o parse conforme a RFC 8259 localmente e sinaliza o primeiro constructo que um parser estrito rejeita.
Para arquivos já dentro do subconjunto estrito, o Formatador de JSON normaliza aspas, chaves e indentação no seu navegador — nada é enviado.
O que o JSON5 realmente adiciona
As extensões do JSON5 vêm todas da sintaxe de literais de objeto do ES5 — o lugar de onde o JSON veio originalmente. Os comentários voltam, como // até o fim da linha e /* block */. As chaves podem ficar sem aspas quando são identificadores válidos. As strings podem usar aspas simples e mais escapes. Os números ganham hexadecimal, ponto decimal à esquerda ou à direita, sinal de mais à esquerda e os valores especiais Infinity, -Infinity e NaN. Vírgulas finais são permitidas nos dois contêineres.
| Recurso | JSON (RFC 8259) | JSON5 |
|---|---|---|
| Comentários | Nenhum — removidos de propósito | // e /* */ permitidos |
| Chaves de objeto | Apenas strings entre aspas duplas | Identificadores válidos sem aspas |
| Aspas de string | Apenas aspas duplas | Simples ou duplas |
| Vírgulas finais | Erro de sintaxe | Permitidas |
| Números | Apenas decimal, sem + à esquerda | Hex, +.5, 5., Infinity, NaN |
| Padrão | RFC 8259 / ECMA-404 | spec do json5.org, definida por biblioteca |
O custo: quem consegue ler o arquivo
O JSON.parse rejeita o primeiro comentário, aspa simples ou chave sem aspas que encontrar — não existe JSON5 nativo de navegador nem plataforma de servidor que o traga. Por isso, todo consumidor precisa da mesma biblioteca, fixada em comportamento compatível. No instante em que um documento deixa de ser JSON estrito, “qualquer parser serve” deixa de ser verdade — e essa garantia é o principal que a RFC 8259 comprava.
Um custo mais sutil é o zoológico de dialetos crescendo na lacuna: JSONC — apenas comentários e vírgulas finais — é o que o tsconfig e o VS Code realmente aceitam, e não é JSON5, já que o JSONC mantém aspas e números estritos. Arquivos derivam entre dialetos, editores discordam do realce, e um upgrade da cadeia de ferramentas pode transformar um constructo tolerado em erro. O JSON estrito não tem essa ambiguidade para administrar.
Onde cada um se encaixa
A divisão segue o leitor. Configuração escrita e revisada por pessoas se beneficia de comentários que explicam um campo, opções comentadas durante o debug e chaves sem aspas que reduzem ruído — esse é o território do JSON5, onde quer que a cadeia de ferramentas já o suporte. Tudo que um programa emite ou consome — payloads de API, estado armazenado, logs estruturados, mensagens de fila — permanece JSON estrito, onde a universalidade é o ponto principal.
- Formato de transmissão: JSON, sempre — qualquer consumidor precisa fazer o parse com zero configuração compartilhada.
- Configuração mantida por pessoas: JSON5 ou JSONC, se suas ferramentas já falam isso nativamente.
- Schema e documentação: o JSON estrito empurra a explicação para os schemas, porque comentários não têm onde viver.
- Dados em repouso: JSON — seus futuros leitores incluem ferramentas que ainda não foram escolhidas.
Convertendo entre eles
De JSON para JSON5 é de graça: JSON estrito já faz parse como JSON5, então “converter” é questão de estilo, não de estrutura. De JSON5 para JSON há perdas exatamente nos pontos que você esperaria: comentários não têm destino e desaparecem, e Infinity, -Infinity e NaN não têm valor em JSON, então viram null ou strings. Todo o resto sobrevive: chaves ganham aspas, aspas se normalizam, números hexadecimais chegam como o mesmo valor em decimal.
Você pode ver a fronteira com seus próprios olhos: cole um arquivo JSON5 em um validador estrito e o primeiro erro aponta o constructo que a cruzou — um comentário, uma aspa, uma vírgula final. O diagnóstico funciona no outro sentido também: se um arquivo de configuração precisará um dia ser lido por ferramentas estritas, mantenha-o dentro do subconjunto estrito desde o primeiro dia, porque fazer downgrade é a viagem com perdas.
Quando escolher cada um
Fique com JSON por padrão e recorra ao JSON5 apenas com um motivo. O motivo é um arquivo que pessoas mantêm e máquinas apenas consomem — configuração de build, feature flags, definições de ambiente — combinado com uma cadeia de ferramentas que já faz o parse de JSON5 nativamente. Se seus consumidores são desconhecidos, externos ou de longa vida, o rigor não é burocracia; é o contrato da interface.
A orientação se inverte com clareza: um arquivo de configuração que nunca precisou de um comentário também não precisa de JSON5, e um arquivo JSON5 que um serviço passou a fazer parse em tempo de execução virou discretamente um formato de transmissão — o que significa que ele quer ser JSON de novo.
Perguntas frequentes
Posso formatar ou validar JSON aqui sem enviar o arquivo?
Sim. O formatador e o validador rodam inteiramente na aba do seu navegador — o parse usa o próprio motor JSON do navegador conforme a RFC 8259, nenhuma requisição sai da página, a Content-Security-Policy do site bloqueia chamadas de saída, e o painel Network do DevTools fica em silêncio. Arquivos de configuração nunca saem da sua máquina. JSON estrito valida; extensões do JSON5 aparecem como erros de sintaxe que nomeiam o constructo exato.
JSON5 é um padrão oficial?
Não no sentido de RFC. Ele é especificado em json5.org e ancorado por sua implementação de referência e comunidade, enquanto o JSON tem a RFC 8259 e a ECMA-404. Na prática, isso significa que não há linguagem de conformidade, nem registro, e a interoperabilidade só é garantida compartilhando o mesmo parser — o oposto da promessa do JSON de que qualquer parser serve.
Por que o JSON não suporta comentários?
Douglas Crockford os removeu de propósito ao padronizar o formato: fornecedores haviam começado a embutir diretivas de parse dentro de comentários, o que quebrava a interoperabilidade entre implementações. Um formato de intercâmbio de dados precisa significar a mesma coisa para todo leitor, então a gramática ficou mínima. As convenções que sobrevivem são chaves irmãs como "_comment", ou JSONC onde a cadeia de ferramentas permite.
O JSON.parse consegue lidar com JSON5?
Não — ele lança erro no primeiro comentário, aspa simples, chave sem aspas ou vírgula final, o que já derruba a maioria dos arquivos JSON5 reais de cara. Você precisa da biblioteca JSON5 ou reescrever para JSON estrito primeiro. Cuidado também com a armadilha do JSONC: um parser que aceita comentários e vírgulas finais ainda não é um parser JSON5, e ele vai rejeitar aspas simples e números hexadecimais.
Converter JSON5 para JSON perde dados?
Os comentários — eles não têm representação legal em JSON, então qualquer conversor os descarta por design. Infinity, -Infinity e NaN perdem seus valores, virando null ou strings dependendo do conversor. Todo o resto sobrevive: chaves sem aspas ganham aspas, aspas simples viram duplas, números hexadecimais chegam como o mesmo valor em decimal. Se os comentários importam, o arquivo deve ficar onde comentários são legais.
Minha configuração deve ser JSON5 ou YAML?
Se sua cadeia de ferramentas já fala JSON5, fique — migrar custa mais do que os comentários valem. Começando do zero, YAML é o formato de configuração humana mais testado em batalha, com escalares em bloco, âncoras para reutilização e uma década de ferramentas, ao preço da sensibilidade à indentação e da inferência de tipos. A vantagem do JSON5: ele fica a um pequeno passo do JSON estrito, então promover uma configuração a dados de máquina é trivial.
Onde posso ler os padrões citados aqui?
Quais ferramentas relacionadas devo usar a seguir?
- Formatar JSONIndenta, ordena chaves e remove comentáriosAbrir
- Validar JSONAponta o erro com linha e coluna e corrige num cliqueAbrir
- O que é JSONGuia em linguagem simplesAbrir
- JSON vs YAMLComparação lado a ladoAbrir
- Como funciona o Base64Guia em linguagem simplesAbrir
- Ferramentas JSONCompare, formate, valide e explore documentos JSON.Abrir