Primero identifica la estructura raíz
Un documento JSON contiene un valor: con frecuencia un objeto entre llaves o un arreglo entre corchetes, aunque la especificación también permite valores simples. En integraciones reales, la API suele exigir una forma concreta. Que [] sea JSON válido no significa que pueda reemplazar al objeto {"items":[]} esperado por el sistema.
Claves y textos usan comillas dobles
JSON no acepta comillas simples para delimitar cadenas ni permite claves sin comillas. {'activo': true} se parece a un objeto de JavaScript, pero no es JSON válido. La versión correcta es {"activo": true}. Si el texto contiene comillas dobles, escápalas: {"mensaje":"Dijo \"hola\""}.
Comas faltantes o finales
Los miembros y elementos se separan con comas, pero el último no lleva una adicional. {"a":1,"b":2,} es inválido. Una coma ausente suele provocar que el analizador marque el siguiente carácter, no necesariamente el lugar exacto donde comenzó el problema.
Valores que pertenecen a JavaScript, no a JSON
Los booleanos se escriben true y false en minúsculas; el valor vacío es null. JSON no representa undefined, NaN, Infinity, funciones, comentarios ni expresiones. Decide de forma explícita cómo traducirlos antes de serializar.
Los números no pueden comenzar con un cero innecesario y el separador decimal es un punto. Fechas, identificadores grandes y decimales financieros suelen enviarse como cadenas para evitar interpretaciones o pérdida de precisión.
Barras y caracteres de control
Dentro de una cadena, la barra invertida inicia una secuencia de escape. Una ruta de Windows podría escribirse como "C:\\datos\\archivo.json". Los saltos reales de línea dentro del texto deben representarse con \n; no se puede partir una cadena libremente entre dos líneas.
Al incrustar JSON dentro de otro lenguaje puede aparecer una segunda capa de escapado. Antes de eliminar barras, determina si observas JSON puro, una cadena que contiene JSON o código fuente que genera JSON.
Codificación y caracteres invisibles
JSON intercambiado por web utiliza Unicode y normalmente UTF-8. Un marcador BOM, un espacio no separable o un carácter de control copiado desde otra aplicación puede causar resultados confusos. Conserva el archivo original, revisa la codificación y no sustituyas caracteres globalmente sin evaluar los valores.
Propiedades duplicadas
{"estado":"nuevo","estado":"cerrado"} puede ser aceptado por algunos analizadores, pero el resultado es ambiguo: unos conservan el último valor y otros pueden actuar diferente. Un validador de sintaxis no siempre advertirá esta situación. El productor debe emitir claves únicas y el consumidor debería rechazar duplicados si afectan decisiones importantes.
JSON válido no equivale a datos correctos
La validación sintáctica confirma llaves, comillas y tipos básicos. No comprueba que exista correo, que cantidad sea positiva o que un estado pertenezca a la lista permitida. Para eso se necesita validación de esquema o reglas de negocio.
Método de diagnóstico
- Trabaja con una copia y confirma que el texto esté completo.
- Valida antes de formatear o transformar.
- Revisa la posición indicada y el delimitador anterior.
- Aísla el objeto o arreglo más pequeño que reproduce el error.
- Comprueba escapado y codificación.
- Una vez válida la sintaxis, valida el esquema esperado.
- Compara el resultado con una muestra conocida sin alterar el orden de datos innecesariamente.
El formateador de Nexo Útil utiliza el analizador nativo del navegador y no “adivina” reparaciones. Esa elección reduce el riesgo de aceptar silenciosamente información distinta a la original.