Formateador y Validador JSON
Pega un JSON desordenado y recíbelo legible y con resaltado de sintaxis — o minificado para producción. La entrada inválida se señala con la línea y columna exactas. Todo se ejecuta en esta pestaña: sin subidas, sin peticiones, ningún servidor ve tus datos.
- Instantáneo · en el cliente
- Ubicación precisa de errores
- Cero subida de datos
La salida formateada aparece aquí.
Esperando entrada.
Seis errores que rompen la mayoría de los JSON
Casi todos los fallos de análisis provienen de uno de estos. Los mensajes mostrados son los que V8 — el motor detrás de Chrome, Edge y Node.js — reporta realmente, para que puedas compararlos con los de tu propia consola.
Coma final
Expected double-quoted property name in JSON at position 7
Los literales de objeto de JavaScript toleran una coma después de la última entrada. JSON no — el analizador espera otra clave y se encuentra con } en su lugar. Es la causa más común de todas, y suele aparecer después de borrar una línea.
{
"a": 1,
"b": 2,
}
{
"a": 1,
"b": 2
}
Comillas simples
Expected property name or '}' in JSON at position 1
Las cadenas JSON deben usar comillas dobles — tanto para las claves como para los valores. Las comillas simples son válidas en JavaScript pero no en JSON, y por eso pegar un objeto JS directamente desde tu editor rara vez se analiza correctamente.
{'ciudad': 'Leeds'}
{"ciudad": "Leeds"}
Claves sin comillas
Expected property name or '}' in JSON at position 1
Toda clave debe ser una cadena entre comillas. Los identificadores desnudos funcionan en JavaScript y en JSON5, pero el JSON puro no tiene esa abreviatura — una trampa frecuente al copiar configuración de un archivo .js.
{puerto: 8080}
{"puerto": 8080}
Comentarios
Expected property name or '}' in JSON at position 4
La especificación JSON no tiene sintaxis de comentarios en absoluto — ni // ni /* */. Editores como VS Code los aceptan en settings.json solo porque esos archivos son JSONC, un dialecto aparte.
{
// el puerto
"puerto": 8080
}
{
"_comentario": "el puerto",
"puerto": 8080
}
NaN, Infinity o undefined
Unexpected token 'N', "{"v":NaN}" is not valid JSON
Los números JSON son solo decimales finitos. Estos tres se cuelan cuando un servidor serializa a mano un cálculo fallido — ten en cuenta que JSON.stringify mismo los convierte a null, o elimina la clave por completo en el caso de undefined.
{"puntos": NaN,
"tope": Infinity}
{"puntos": null,
"tope": null}
Saltos de línea sin procesar en cadenas
Bad control character in string literal in JSON at position 10
Un salto de línea o tabulador literal dentro de las comillas es ilegal; debe escaparse como \n o \t. Esto aparece cuando se pega la salida de un log o el valor de un textarea dentro de una cadena JSON sin escapar.
{"nota": "línea
cortada"}
{"nota": "línea\ncortada"}
JSON vs JSON5 vs JSONC
Si un archivo con comentarios se analiza en una herramienta pero no en otra, casi con seguridad no es JSON puro. Este validador apunta al JSON estricto — el formato que las API realmente intercambian.
| Característica | JSON | JSON5 | JSONC |
|---|---|---|---|
| Comentarios | No | Sí — // y /* */ |
Sí — // y /* */ |
| Comas finales | No | Sí | Sí, pero desaconsejadas |
| Claves sin comillas | No | Sí | No |
| Cadenas con comillas simples | No | Sí | No |
Hexadecimal y NaN / Infinity |
No | Sí | No |
| Dónde lo encuentras | API, almacenamiento, configuración en todas partes | Configuración editada a mano — Babel, Chromium | settings.json de VS Code, tsconfig.json |
Referencia de teclado
Preguntas frecuentes
¿El formateo modifica los datos de mi JSON?
Los datos no. El formateo solo reescribe los espacios en blanco, así que el resultado analizado es idéntico — {"a":1} y una versión embellecida se deserializan exactamente al mismo objeto.
Merece la pena conocer dos detalles a nivel de bytes. Las claves de objeto se reemiten en el orden de propiedades de JavaScript, lo que significa que las claves con forma de entero se ordenan numéricamente primero: {"2":"b","1":"a"} vuelve como {"1":"a","2":"b"}. Y las claves duplicadas se colapsan a la última, ya que la primera ya se había sobrescrito durante el análisis. Ambas son propiedades del propio análisis de JSON, no de esta herramienta.
¿Por qué mi JSON pasa la validación pero sigue rompiendo mi aplicación?
Porque una sintaxis válida no dice nada sobre valores correctos. El culpable más común es la precisión de enteros grandes: los números JSON se convierten en dobles IEEE-754, así que un ID como 9007199254740993 vuelve silenciosamente como ...992. Todo lo que supere 253-1 debería viajar como cadena.
Lo mismo se aplica a los decimales largos, que se redondean a unos 17 dígitos significativos. Más allá de los números, una carga útil puede ser JSON perfectamente válido y aun así fallar tu esquema — un campo ausente, un número donde se esperaba una cadena, null donde se esperaba un objeto. Un validador comprueba la gramática; un esquema comprueba el significado.
¿Cuál es la diferencia entre Formatear y Minificar?
Formatear añade sangría y saltos de línea para que una persona pueda leer y comparar la estructura. Minificar elimina todo espacio y salto de línea opcionales en una sola línea para que una máquina pueda transferirla más rápido.
El ahorro es real pero modesto: una carga útil típica de pedido aquí pasa de 449 bytes con sangría de 2 espacios a 290 minificada, aproximadamente un 35% — o un 48% si estaba con sangría de 4 espacios. Ten en cuenta que gzip, que casi todos los servidores ya aplican, comprime los espacios repetidos de forma muy eficiente, así que minificar encima de la compresión gana mucho menos de lo que sugieren los números en bruto. Usa Formatear mientras depuras, Minificar para almacenamiento o cargas que no van comprimidas con gzip.
¿Se envían mis datos a algún servidor?
No. El análisis usa el JSON.parse integrado del navegador, y el resaltado se hace con el propio JavaScript de esta página. No hay subidas, ni registros, ni analíticas asociadas al editor.
Puedes confirmarlo en segundos: abre las herramientas de desarrollador, cambia a la pestaña Red y formatea algo — no aparece ninguna petición. Una vez cargada la página puedes desconectarte por completo de internet y sigue funcionando, que es lo que lo hace seguro para claves de API, tokens y registros de clientes.
