Português (Brasil)

Ferramentas para desenvolvedores · Formatador e validador JSON

Por que uma vírgula final quebra JSON e para onde o validador aponta

· Como funciona

JSON fluxo de trabalho do desenvolvedor validação

Por que uma vírgula final quebra JSON e onde o validador aponta ilustrado com tokens JSON e um limite de validação preciso
Ilustração vetorial original ToolAcre

A vírgula final é o erro JSON mais comum, e o erro nunca cai na própria vírgula. Aprenda o que a gramática espera após uma vírgula e como ler a posição informada.

O bug de um caractere que leva dez minutos para ser encontrado

O bug de um caractere que leva dez minutos para ser encontrado – uma configuração editada manualmente, uma vírgula deixada após a última propriedade e uma compilação que falha. Um analisador estrito segue a sequência de tokens realmente presente no documento. Considere um objeto terminando com `'enabled': true,` e um array terminando com `'blue',`: ambos os separadores prometem outro item mesmo que o próximo token feche o contêiner.

ToolAcre não deriva um local da mensagem do mecanismo do navegador. JSON.parse primeiro decide a validade; somente após a falha o scanner do repositório percorre o texto e relata o primeiro caractere inaceitável. Para uma vírgula final, esse caractere é a chave ou colchete de fechamento, e o motivo diz explicitamente “Vírgula final”. Em um objeto, falta outro nome de membro entre aspas; em uma matriz, falta outro valor completo.

O que a gramática JSON diz depois de uma vírgula

O que a gramática JSON diz depois de uma vírgula — RFC 8259 usa vírgulas para separar valores em matrizes e membros em objetos. Um separador, portanto, precisa de um item válido em cada lado. Após uma vírgula de objeto, o analisador espera um nome entre aspas duplas, dois pontos e um valor. Após uma vírgula na matriz, ele espera qualquer valor JSON válido. Um delimitador de fechamento não satisfaz nenhuma das produções.

O separador pertence entre dois membros ou elementos, nunca depois do final. Remover a última vírgula não altera nenhum valor ou ordem; restaura a gramática que fecha o contêiner diretamente após seu valor final. É também por isso que uma vírgula pode aparecer depois de cada item anterior sem problemas: cada uma dessas vírgulas é seguida pelo próximo item que promete.

Por que o erro cai no colchete de fechamento

Por que o erro cai no colchete de fechamento — uma vírgula é legal no meio de um contêiner, então o analisador não pode rejeitá-la apenas à primeira vista. Ele consome o separador e muda de estado para esperar outro nome ou valor. A contradição só se torna certa quando `}` ou `]` chega. Esse delimitador é onde o item prometido se mostra ausente, mesmo que a vírgula anterior tenha causado a transição de estado.

O delimitador relatado é, portanto, uma evidência sobre o estado do analisador, e não uma sugestão para excluir a chave ou colchete. Leia um token à esquerda. Se esse token for uma vírgula e o delimitador fechar o mesmo contêiner, remova a vírgula e preserve o fechamento. O scanner de ToolAcre nomeia a condição da vírgula final e fornece a posição de origem após JSON.parse rejeitar o documento.

JavaScript, Python e linters modernos permitem isso, JSON não

JavaScript, Python e linters modernos permitem isso, JSON não - literais da linguagem de origem geralmente permitem uma vírgula após o último item porque torna as linhas reordenadas e adições futuras mais fáceis de revisar. Os formatadores podem até inserir ou preservar esse estilo. Essas conveniências pertencem à gramática de cada idioma. Um objeto literal `.js` ou dicionário Python pode ser uma fonte válida enquanto a mesma pontuação visível permanece inválida em um documento RFC 8259 JSON.

Um editor configurado para JavaScript pode, conseqüentemente, não mostrar nenhum aviso quando um fragmento colado termina em vírgula. O analisador de destino ainda controla a aceitação. Use um modo de idioma JSON para texto `.json` e valide a carga exata enviada para um API ou campo de configuração. A clemência em um arquivo de origem, linter ou analisador JSON5 não é evidência transferível sobre um consumidor JSON estrito.

Exemplo resolvido: três vírgulas finais em um arquivo

Exemplo resolvido: três vírgulas finais em um arquivo - suponha que `features` termine com `"beta",`, seu objeto que o contém termine com `"enabled": true,` e um segundo membro raiz tenha o mesmo erro. A primeira validação para no colchete de fechamento após `beta`. A remoção dessa vírgula permite que a análise continue até a chave de fechamento após `true`, e o reparo do segundo local revela o erro restante do objeto no nível raiz.

Esta sequência é esperada porque os analisadores geralmente relatam o primeiro ponto onde a continuação é impossível, e não todos os defeitos posteriores. Mapeie cada linha e coluna para seu delimitador de fechamento, inspecione o separador imediatamente anterior, faça uma alteração intencional e execute a validação novamente. Não exclua todas as vírgulas em massa: são necessários separadores entre vizinhos reais. A validação repetida distingue as três vírgulas terminais inválidas das vírgulas válidas em todo o mesmo documento.

Variantes que produzem o mesmo erro

Variantes que produzem erros de separador relacionados - uma vírgula inicial, duas vírgulas seguidas e uma vírgula após o valor raiz usam indevidamente o mesmo caractere, mas violam diferentes estados do analisador. Uma vírgula inicial não possui nenhum item concluído à sua esquerda. Vírgulas consecutivas não fornecem nenhum item entre separadores. Uma vírgula após o valor raiz completo aparece depois que o texto JSON já atingiu um final válido.

Esses casos não devem ser automaticamente rotulados como vírgulas finais. A razão precisa depende da posição e do estado do contêiner. Dentro de `{"a":1,,"b":2}`, a segunda vírgula é inesperada onde um nome de membro entre aspas deve começar. Em `[ ,1]`, a primeira vírgula aparece onde um valor é obrigatório. Inspecione o diagnóstico e os tokens adjacentes em vez de aplicar uma regra universal de “excluir a vírgula anterior” fora do padrão de delimitador de fechamento.

O que isso não cobre

O que isso não cobre - JSON5 e alguns fluxos de trabalho JSON com comentários permitem deliberadamente vírgulas finais. Um arquivo escrito para uma dessas gramáticas deve usar seu analisador, extensão e ferramentas declaradas. Tratá-lo como JSON estrito produzirá erros que refletem uma incompatibilidade de formato, não necessariamente um erro de autoria. Por outro lado, aceitá-lo com um analisador permissivo não torna a fonte segura para enviar para um endpoint JSON estrito.

Alterar os analisadores apenas para silenciar esse diagnóstico altera a linguagem aceita e pode ocultar a incompatibilidade com o eventual consumidor. Comentários, nomes sem aspas e strings entre aspas simples podem acompanhar vírgulas finais em formatos estendidos, criando falhas adicionais quando o texto ultrapassa os limites. Confirme primeiro o contrato de destino. Se disser JSON, remova a sintaxe da extensão; se estiver escrito JSON5 ou JSONC, valide com ferramentas que implementem esse formato exato.

Conclusão: olhe um token à esquerda da posição relatada

Conclusão: olhe um token à esquerda da posição relatada - quando o cursor estiver abaixo de `}` ou `]`, a vírgula anterior pode ter prometido um membro ou elemento que nunca chegou. Preserve o delimitador de fechamento estruturalmente necessário e remova apenas o separador de terminais. Em seguida, valide todo o documento novamente, pois o primeiro local reparado pode revelar outra vírgula final em um contêiner posterior.

ToolAcre mantém as responsabilidades restritas: JSON.parse decide que o documento é inválido e o scanner local fornece uma razão estrutural estável mais linha e coluna após a falha. Use essa coordenada para inspecionar o contexto do analisador em vez de culpar o caractere destacado isoladamente. Uma vírgula final é uma edição de um caractere, mas entender por que o erro aparece no delimitador a seguir torna o mesmo diagnóstico confiável em objetos, matrizes e configurações profundamente aninhadas.