Herramientas de desarrollo · JSON formateador y validador
Por qué una coma final termina en JSON y hacia dónde apunta el validador
· Cómo funciona
json flujo de trabajo del desarrollador validación
La coma final es el error JSON más común y el error nunca aparece en la coma misma. Aprenda lo que espera la gramática después de una coma y cómo leer la posición informada.
El error de un carácter que tarda diez minutos en ser encontrado
El error de un carácter que tarda diez minutos en descubrirse: una configuración editada a mano, una coma después de la última propiedad y una compilación que falla. Un analizador estricto sigue la secuencia de tokens realmente presente en el documento. Considere un objeto que termina en `'enabled': true,` y una matriz que termina en `'blue',`: ambos separadores prometen otro elemento aunque el siguiente token cierre el contenedor.
ToolAcre no deriva una ubicación del mensaje del motor del navegador. JSON.parse primero decide la validez; sólo después de una falla el escáner del repositorio recorre el texto e informa el primer carácter inaceptable. Para una coma final, ese carácter es la llave o corchete de cierre, y el motivo dice explícitamente "coma final". En un objeto, falta otro nombre de miembro entre comillas; en una matriz, falta otro valor completo.
Qué dice la gramática JSON después de una coma
Lo que dice la gramática JSON después de una coma: RFC 8259 usa comas para separar valores en matrices y miembros en objetos. Por lo tanto, un separador necesita un elemento válido en cada lado. Después de una coma de objeto, el analizador espera un nombre entre comillas dobles, dos puntos y un valor. Después de una coma de matriz, espera cualquier valor JSON válido. Un delimitador de cierre no satisface ninguna producción.
El separador pertenece entre dos miembros o elementos, nunca después del final. Eliminar la última coma no cambia ningún valor ni orden; restaura la gramática que cierra el contenedor directamente después de su valor final. Esta es también la razón por la que puede aparecer una coma después de cada elemento anterior sin problemas: cada una de esas comas va seguida del siguiente elemento que promete.
Por qué el error aparece en el paréntesis de cierre
Por qué el error aparece en el corchete de cierre: una coma es válida en medio de un contenedor, por lo que el analizador no puede rechazarla simplemente al verla. Consume el separador y cambia de estado para esperar otro nombre o valor. La contradicción se vuelve cierta solo cuando llega `}` o `]`. Ese delimitador es donde el elemento prometido resulta ausente, aunque la coma anterior provocó la transición de estado.
El delimitador informado es, por lo tanto, evidencia sobre el estado del analizador, no una sugerencia para eliminar la llave o el corchete. Lea una ficha a la izquierda. Si ese token es una coma y el delimitador cierra el mismo contenedor, elimine la coma y conserve el cierre. El escáner de ToolAcre nombra la condición de coma final y proporciona la posición de origen después de que JSON.parse rechaza el documento.
JavaScript, Python y linters modernos lo permiten, JSON no
JavaScript, Python y los linters modernos lo permiten, JSON no; los literales del idioma de origen a menudo permiten una coma después del último elemento porque hace que las líneas reordenadas y las adiciones futuras sean más fáciles de revisar. Los formateadores pueden incluso insertar o conservar ese estilo. Esas comodidades pertenecen a la gramática de cada idioma. Un literal de objeto `.js` o un diccionario de Python pueden ser una fuente válida, mientras que la misma puntuación visible sigue siendo inválida en un documento RFC 8259 JSON.
Un editor configurado para JavaScript puede, en consecuencia, no mostrar ninguna advertencia cuando un fragmento pegado termina en una coma. El analizador de destino todavía controla la aceptación. Utilice un modo de idioma JSON para el texto `.json` y valide la carga útil exacta enviada a una API o campo de configuración. La indulgencia en un archivo fuente, linter o analizador JSON5 no es evidencia transferible sobre un consumidor estricto JSON.
Ejemplo resuelto: tres comas finales en un archivo
Ejemplo resuelto: tres comas finales en un archivo; supongamos que `features` termina con `"beta",`, el objeto que lo contiene termina con `"enabled": true,` y un segundo miembro raíz tiene el mismo error. La primera validación se detiene en el paréntesis de cierre después de `beta`. Eliminar esa coma permite que el análisis continúe hasta la llave de cierre después de `true`, y reparar la segunda ubicación revela el error restante del objeto de nivel raíz.
Se espera esta secuencia porque los analizadores generalmente informan el primer punto donde la continuación es imposible, no todos los defectos posteriores. Asigne cada línea y columna a su delimitador de cierre, inspeccione el separador inmediatamente anterior, realice un cambio intencional y ejecute la validación nuevamente. No elimine de forma masiva todas las comas: se requieren separadores entre vecinos reales. La validación repetida distingue las tres comas terminales no válidas de las comas válidas en todo el mismo documento.
Variantes que producen el mismo error
Las variantes que producen errores de separador relacionados (una coma inicial, dos comas seguidas y una coma después del valor raíz) hacen un mal uso del mismo carácter pero violan diferentes estados del analizador. Una coma inicial no tiene ningún elemento completo a su izquierda. Las comas consecutivas no proporcionan ningún elemento entre separadores. Aparece una coma después del valor raíz completo después de que el texto JSON ya haya alcanzado un final válido.
Esos casos no deben etiquetarse automáticamente como comas finales. El motivo preciso depende de la posición y el estado del contenedor. Dentro de `{"a":1,,"b":2}`, la segunda coma es inesperada donde debería comenzar el nombre de un miembro entre comillas. En `[ ,1]`, aparece la primera coma donde se requiere un valor. Inspeccione los tokens de diagnóstico y circundantes en lugar de aplicar una regla universal de "eliminar la coma anterior" fuera del patrón delimitador de cierre.
Lo que esto no cubre
Lo que esto no cubre: JSON5 y algunos flujos de trabajo JSON-with-comments permiten deliberadamente comas finales. Un archivo escrito para una de esas gramáticas debe utilizar su analizador, extensión y herramientas declarados. Tratarlo como estricto JSON producirá errores que reflejan una falta de coincidencia de formato, no necesariamente un error de redacción. Por el contrario, aceptarlo con un analizador permisivo no hace que sea seguro enviar la fuente a un punto final estricto JSON.
Cambiar los analizadores simplemente para silenciar este diagnóstico cambia el lenguaje aceptado y puede ocultar una incompatibilidad con el consumidor final. Los comentarios, los nombres sin comillas y las cadenas entre comillas simples pueden ir acompañados de comas finales en formatos extendidos, lo que genera fallos adicionales cuando el texto cruza el límite. Confirme primero el contrato de destino. Si dice JSON, elimine la sintaxis de la extensión; si dice JSON5 o JSONC, valide con herramientas que implementen ese formato exacto.
Conclusión: mire una ficha a la izquierda de la posición informada
Conclusión: mire una ficha a la izquierda de la posición informada: cuando el cursor se encuentra debajo de `}` o `]`, la coma anterior puede haber prometido un miembro o elemento que nunca llegó. Conserve el delimitador de cierre estructuralmente necesario y retire solo ese separador de terminales. Luego valide todo el documento nuevamente, porque la primera ubicación reparada puede revelar otra coma al final en un contenedor posterior.
ToolAcre mantiene las responsabilidades limitadas: JSON.parse decide que el documento no es válido y el escáner local proporciona una razón estructural estable más línea y columna después del fallo. Utilice esa coordenada para inspeccionar el contexto del analizador en lugar de culpar al carácter resaltado de forma aislada. Una coma final es una edición de un carácter, pero comprender por qué aparece el error en el siguiente delimitador hace que el mismo diagnóstico sea confiable en todos los objetos, matrices y configuraciones profundamente anidadas.