JSON Toolkit

Por que uma vírgula final quebra o JSON

Resumo: Vírgulas finais são legais em literais de objeto JavaScript e fatais em JSON. Aqui está o erro exato, a gramática da RFC 8259 que o provoca e três correções que realmente funcionam.

Iniciante~3 min de leituraPublicado em 2026-10-30Atualizado em 2026-10-30
Por que vírgulas finais falham em JSON e como corrigi-las

Resumo da ópera: JSON proíbe vírgulas finais em todos os lugares — quando um analisador falha, exclua a última vírgula com um formatador; use JSON5 ou JSONC apenas para análise local leniente e sempre emita JSON padrão para outros sistemas.

Porque a gramática diz isso.

{
  "name": "demo",
  "size": 12,
}

JSON.parse lança Unexpected token } in JSON at position 34. O Node formula de outra maneira, mas toda engine aponta para o mesmo lugar: a vírgula antes de }.

Do que o analisador está realmente reclamando

A produção de objeto na RFC 8259 é:

object = begin-object [ member *( value-separator member ) ] end-object

Colchetes significam opcional, o asterisco significa zero ou mais. Em termos simples: vírgulas separam membros, e o último membro é seguido diretamente por }.

Então, após uma vírgula, o analisador está pronto para outro nome de membro. Ele lê } e falha. Arrays se comportam de forma idêntica — [1, 2, 3,] falha no ].

De onde vem o hábito

Literais de objeto JavaScript permitem vírgulas finais desde o ES5, assim como listas Python e literais compostos Go. Editores as adicionam automaticamente. Então alguém copia um literal de objeto de um arquivo .js para um arquivo .json e o arquivo deixa de ser analisado.

A outra origem comum é JSON montado à mão: um laço que roda i <= length deixa uma vírgula depois do elemento final.

Três correções

Remova a vírgula. Bom para edições manuais. Cole no formatador JSON e o erro é informado com linha e coluna, então você vê exatamente qual excluir.

Analise como JSON5. Superconjuntos aceitam vírgulas finais, o que é bom para configuração local. Não é bom para nada que você envia a outro sistema — o receptor ainda vai rejeitar.

Pare de concatenar strings. Use JSON.stringify, json.dumps, Jackson. O serializador trata os separadores corretamente e resolve o escape ao mesmo tempo.

Lista rápida de auditoria

Onde Causa típica
Concatenação em laço i <= length deixa uma vírgula extra
Copiar e colar Literal de objeto retirado de um arquivo JS
Templates Vírgula codificada à mão mais um laço que adiciona outra
Edição manual Último campo excluído, vírgula dele deixada para trás

Perguntas frequentes

Por que vírgulas finais são legais em JavaScript mas não em JSON?

Literais de objeto JavaScript as permitem desde o ES5, e listas Python e literais compostos Go também, o que explica por que o hábito segue as pessoas para o JSON. A RFC 8259 permite vírgulas apenas entre membros: o último membro é seguido diretamente por } ou ]. Copiar um literal de objeto de um arquivo .js para um .json é a origem usual.

Devo analisar como JSON5 para aceitar vírgulas finais?

Apenas para configuração local. Superconjuntos aceitam vírgulas finais, mas nada que você envia a outro sistema é analisado como JSON estrito e ainda vai falhar. Gere JSON padrão na fronteira de saída em vez de contar com a leniência do receptor.

Onde devo olhar primeiro após um erro de vírgula final?

Comece pela posição na mensagem de erro: ela normalmente aponta para a vírgula antes de } ou ]. Depois verifique as três origens usuais: um laço escrito com i <= length, um literal de objeto colado de um arquivo JS e um template que codifica uma vírgula junto com um laço. Colar em um formatador informa a linha e a coluna exatas.

Leitura adicional