Cómo corregir JSON no válido: los 7 errores que rompen todos los analizadores
El análisis JSON suena trivial hasta que un solo personaje perdido interrumpe tu construcción cinco minutos antes de la implementación. JSON es intencionalmente estricto, más estricto que JavaScript, que es exactamente la razón por la que los desarrolladores que vienen de JS siguen quedando atrapados. La buena noticia es que casi todos los errores "JSON no válidos" son uno de los siete errores comunes. Aprenda a reconocerlos y la mayoría de los JSON rotos están a un carácter de ser válidos.
1. Comas al final (el culpable número uno)
Este es el error JSON más común. JavaScript le permite dejar una coma después del último elemento de un objeto o matriz; JSON, según su especificación RFC 8259, no. Entonces {"name": "Alice", "age": 30,} no es válido debido a esa coma después de 30, y ["a", "b",] no es válido por la misma razón. La solución es simplemente eliminar la coma después de la propiedad final o elemento de matriz. Esto afecta a todos, desde los jóvenes que editan manualmente un archivo de configuración hasta los mayores que pegan un fragmento de JavaScript.
2. Comillas simples en lugar de comillas dobles
JSON requiere comillas dobles tanto entre las claves como entre los valores de cadena. Las comillas simples son válidas en JavaScript y Python, pero no en JSON. Entonces {'name': 'Alice'} no es válido; debe ser {"nombre": "Alice"}. Esto suele suceder cuando su carga útil proviene de un archivo console.log de JavaScript o de la salida str() de Python. A menudo funciona buscar y reemplazar comillas simples o dobles, pero tenga cuidado con los apóstrofes dentro de las cadenas, "it's" se rompería, por lo que una solución que tenga en cuenta el analizador es más segura.
3. Claves sin comillas
En JavaScript puedes escribir claves de objetos sin comillas: {nombre: "Alice"}. JSON no permite esto, cada clave debe ser una cadena entre comillas dobles. Entonces {nombre: "Alice"} debe convertirse en {"nombre": "Alice"}. Este es otro síntoma de copiar un literal de objeto JavaScript directamente en un contexto JSON.
4. Corchetes faltantes o no coincidentes
Cada llave de apertura necesita una llave de cierre, y cada corchete de apertura necesita su par. Cuando no coinciden, aparece el temido "Fin inesperado de la entrada JSON". Estos son difíciles de detectar a simple vista en un archivo grande, que es donde un formateador que imprime bonito y resalta la coincidencia de corchetes se gana la vida, los corchetes no coincidentes saltan en el momento en que se sangra la estructura.
5. Comentarios
JSON no tiene comentarios. No // comentarios de línea, no comentarios de bloque. Si agregó un comentario para explicar un campo, el analizador rechaza todo el archivo. La configuración de VS Code usa una variante llamada JSONC que permite comentarios, y hay un superconjunto llamado JSON5 que permite comentarios, comillas simples y comas finales, pero los analizadores estándar como JSON.parse, el módulo json de Python y la mayoría de las bibliotecas de servidor solo aceptan JSON estricto. Para archivos de configuración que necesitan comentarios, YAML o JSONC son mejores opciones que doblar JSON.
6. Valores de JavaScript que no son JSON válidos
Existen tres valores en JavaScript pero no en JSON: indefinido, NaN e Infinity. Si su fuente de datos produjo uno de estos, común al serializar objetos que contienen una conversión numérica fallida, el resultado es JSON no válido. La solución es reemplazarlos con nulo (el equivalente JSON de "sin valor") o un valor predeterminado sensato. El error suele estar en sentido ascendente, en el punto donde se generaron los datos, no en el propio JSON.
7. Caracteres sin escape en cadenas
Ciertos caracteres deben tener como carácter de escape una barra invertida dentro de una cadena JSON. Una nueva línea sin formato, una tabulación o una barra invertida literal provocarán un error de análisis. Por lo tanto, una ruta de Windows como "C:\Users\Alice" no es válida, las barras invertidas deben duplicarse a "C:\\Users\\Alice" y un salto de línea real dentro de una cadena debe escribirse como \n. Estos son invisibles en muchos editores, lo que hace que sea frustrante localizarlos.
El flujo de trabajo de depuración más rápido
El peor mensaje de error JSON es simplemente "json no válido" sin ubicación. Un buen validador hace tres cosas: le dice qué está mal, le dice dónde (línea y columna) y muestra el contexto circundante. El flujo de trabajo más rápido es pegar el archivo en un validador, leer la línea a la que apunta y luego verificar la línea encima, porque el analizador a menudo solo se da cuenta de que algo anda mal cuando llega al siguiente token, por lo que una coma faltante en la línea 4 aparece como un error en la línea 5. Si el error apunta a la posición 0, verifique si hay una marca de orden de bytes o texto perdido antes del corchete de apertura.
Prevención de JSON no válido
Tres hábitos previenen la mayoría de los dolores de JSON. Nunca edites manualmente archivos JSON grandes sin una herramienta que respete la gramática. Impresión bonita al guardar, porque los errores estructurales son obvios en JSON con sangría y están ocultos en una sola línea compacta. Y valide antes de confirmar: una simple verificación en su canal de CI detecta errores de sintaxis antes de que lleguen a cualquier entorno. La mayoría de los JSON rotos están a un carácter de ser válido; el truco está en captar a ese personaje temprano.