Validar JSON
El validador de JSON realiza la validación de sintaxis estricta de RFC 8259 directamente en tu navegador, sin transmitir tu payload por la red. Señala la línea y la columna exactas de los errores de sintaxis con un caret visual, un diagnóstico en lenguaje claro y una clasificación específica de comas finales, comillas simples, claves sin comillas, corchetes sin parear, BOM y comillas inteligentes de procesador de textos.
¿Cómo funciona Validar JSON?
Las implementaciones estándar de JSON.parse() del navegador devuelven mensajes de error notoriamente poco útiles, como "Unexpected token in JSON at position 4812". Esa excepción en bruto obliga a los desarrolladores a contar desplazamientos de bytes a mano y a adivinar qué comilla, coma o corchete está fuera de sitio.
El validador de ToolsByUs implementa un escáner léxico no recursivo y un validador de tokens dedicados que rastrean números de línea, posiciones de columna, pilas de anidamiento de delimitadores y lookaheads de caracteres conforme a RFC 8259:
- Cero excepciones en bruto: las excepciones se capturan y se traducen a informes de diagnóstico accionables, con fragmentos caret exactos que apuntan al carácter problemático en la línea y la columna exactas.
- Clasificación explícita de errores: identifica con precisión comas finales, claves de objeto sin comillas, delimitadores con comilla simple, comas separadoras ausentes y corchetes sin parear (por ejemplo, cerrar un array con una llave).
- Detección de comillas inteligentes y BOM: detecta marcas de orden de bytes UTF-8 (BOM) sutiles e invisibles (0xFEFF) y comillas inteligentes curvas (
“y”), introducidas con frecuencia al copiar JSON desde editores de texto enriquecido o procesadores de textos. - Gramática numérica estricta: rechaza números no finitos de IEEE 754 como
NaN,Infinityy ceros a la izquierda en los números (como012), que violan la sección 6 de RFC 8259. - Protección de profundidad 10,000: emplea una máquina de estados finita iterativa que valida estructuras profundamente anidadas sin llegar al desbordamiento de la pila de llamadas del navegador.
El parser funciona manteniendo una máquina de estados que transita entre los estados BEFORE_KEY, AFTER_KEY, COLON, BEFORE_VALUE y AFTER_VALUE, verificando a la vez que los corchetes estructurales de apertura ( [ y { ) emparejan con sus contrapartes de cierre exactas en orden de último en entrar, primero en salir.
Ejemplo de entrada malformada
{
'service': "auth",
"active": true,
}Salida de ejemplo
Line 2, Column 3:
'service': "auth",
^
Error: Single quotes are not allowed in JSON. Use double quotes (").
Recommendation: Replace single quotes with double quotes.¿Qué opciones y casos límite admite Validar JSON?
| Parámetro | Tipo | Valor predeterminado | Comportamiento y casos límite |
|---|---|---|---|
| TRAILING_COMMA | Error de sintaxis | Prohibido | Coma final antes de } o ]. Aunque es válido en JavaScript/JSON5, viola la Sección 4 de RFC 8259. |
| SINGLE_QUOTES | Error de sintaxis | Prohibido | Comillas simples (') que envuelven cadenas o claves de propiedad. JSON requiere comillas dobles ASCII estándar ("). |
| UNQUOTED_KEY | Error de sintaxis | Prohibido | Identificadores de propiedades de objeto sin comillas dobles (por ejemplo, { name: 'value' }). |
| MISSING_COMMA | Error de sintaxis | Prohibido | Pares clave-valor consecutivos o miembros de array sin un delimitador de coma intermedio. |
| MISMATCHED_BRACKET | Error de estructura | Prohibido | Delimitadores de contenedor no coincidentes, como cerrar un array con una llave ( ] vs } ). |
| SMART_QUOTES | Error de codificación | Detectado | Comillas tipográficas de procesador de texto (« »). Se diagnostica automáticamente con la ubicación de la columna y la solución. |
| BOM (Byte Order Mark) | Error de codificación | 0xFEFF | La marca de orden de bytes UTF-8 inicial está prohibida por la Sección 8.1 de RFC 8259 en los intercambios de red. |
| NAN_INFINITY_REJECTED | Gramática numérica | Prohibido | NaN, Infinity y -Infinity no son tokens numéricos JSON válidos según la Sección 6 de RFC 8259. |
Preguntas frecuentes
¿Por qué la sintaxis válida de objetos JavaScript falla en la validación de JSON?
JSON (RFC 8259) es un formato de intercambio, no un lenguaje de programación. Las características permitidas en JavaScript —como comas finales, cadenas con comillas simples, claves de propiedad sin comillas, comentarios y valores NaN— están explícitamente prohibidas por el estándar JSON para garantizar la interoperabilidad entre lenguajes de los parsers de Python, Go, Java, C++ y Rust.
¿Qué indica el puntero caret?
El caret (^) apunta directamente a la columna del carácter donde el parser léxico encontró un carácter inesperado o una secuencia ilegal, y te ayuda a localizar la rotura exacta de sintaxis incluso en payloads de varios megabytes.
¿Cómo detecta el validador las comillas inteligentes?
Cuando el texto se copia de herramientas de documentación, entradas de blog o clientes de correo, las comillas dobles ASCII (") suelen convertirse en comillas curvas tipográficas (Unicode U+201C y U+201D). El validador detecta explícitamente esos puntos de código Unicode y recomienda sustituirlos por comillas dobles estándar.
¿Por qué JSON rechaza los comentarios?
Douglas Crockford eliminó deliberadamente los comentarios de la especificación JSON original para impedir que los parsers albergaran directivas de procesamiento o pragmas, y asegurar que JSON siguiera siendo puramente un formato de intercambio de datos. Para archivos de configuración que admitan comentarios, usa JSONC.
¿Cómo se manejan las claves duplicadas según RFC 8259?
RFC 8259 especifica que las claves de objeto deberían ser únicas. Mientras algunos parsers nativos sobrescriben silenciosamente los valores anteriores con los posteriores, ToolsByUs resalta las claves duplicadas con avisos de diagnóstico para prevenir errores sutiles de pérdida de datos.
¿Se envía mi payload validado a algún backend?
No. El parseo, la comprobación de tokens y la validación ocurren 100% del lado del cliente, dentro de tu navegador. Ningún dato sale jamás de tu equipo, garantizado por nuestra arquitectura sin backend.