Herramientas de desarrollo · JSON formateador y validador
Literales de objetos de JavaScript frente a JSON: por qué las comillas simples fallan en la validación
· Cómo funciona
json flujo de trabajo del desarrollador validación
Un objeto impreso por una consola JavaScript se parece a JSON pero normalmente no lo es. Esta publicación enumera las diferencias exactas (comillas, claves sin comillas, indefinidas, funciones) y muestra dónde cada una activa un validador.
Salió de la consola, entonces ¿por qué no es válido?
Salió de la consola, entonces ¿por qué no es válido? — las consolas de desarrollador muestran valores de JavaScript como texto similar a fuente de JavaScript, no como una serialización JSON garantizada. Un objeto copiado puede contener nombres de propiedades simples, cadenas entre comillas simples, `undefined` o anotaciones específicas del navegador. Todos ellos pueden ser comprensibles para un motor JavaScript o un lector humano, pero fallan inmediatamente en un archivo `.json`, cuya gramática es intencionalmente más pequeña e independiente del código ejecutable.
Considere `{name: "Ada", active: true, missing: undefined}`. Las llaves, los dos puntos y el valor booleano se parecen a JSON, pero la primera clave básica ya viola la regla de miembro de objeto y `undefined` fallaría más adelante. ToolAcre informa el primer carácter o valor no admitido con una línea y una columna, por lo que es mejor realizar la conversión en orden.
Las cadenas deben utilizar comillas dobles.
Las cadenas deben usar comillas dobles: JSON define una cadena como caracteres encerrados por `"`, con barras invertidas cuando sea necesario. Una comilla simple no tiene ninguna función como delimitador de cadena. Cuando un validador cumple con `'Ada'`, no comienza una cadena y luego objeta su contenido; rechaza el propio apóstrofe inicial. Esto se aplica igualmente a los nombres de propiedades y a los valores de cadenas, aunque JavaScript permite cualquiera de los estilos de comillas para sus propios literales.
Convertir citas requiere más cuidado que reemplazar globalmente cada apóstrofo. Un apóstrofo dentro de un texto como `Ada's profile` es contenido normal una vez que el valor está entre comillas dobles, mientras que las comillas dobles existentes dentro de ese contenido deben tener caracteres de escape. El formulario JSON válido es `"Ada's "profile""`.
Las claves deben ser cadenas entre comillas
Las claves deben ser cadenas entre comillas: los literales de objetos JavaScript permiten nombres de estilo de identificador como `{name: 1}` y nombres calculados como `{[expression]: 1}`. JSON no permite ninguna taquigrafía. Después de una llave o coma de apertura, el siguiente miembro debe comenzar con una cadena entre comillas dobles, seguida de dos puntos. La representación válida es `{"name": 1}`. Un validador que apunta al `n` está identificando el lugar exacto donde se requirió una cotización.
Citar cada clave también elimina la ambigüedad en torno a espacios, guiones y palabras reservadas. JavaScript puede requerir una sintaxis de origen diferente para esos casos, pero JSON usa una regla consistente: `"display-name"`, `"first name"` y `"default"` son todos nombres de miembros comunes. Las claves de apariencia numérica también son cadenas.
Valores JSON simplemente no tiene
Valores JSON simplemente no tiene: su vocabulario de valores es objeto, matriz, cadena, número, `true`, `false` y `null`. No hay `undefined`, `NaN`, `Infinity`, función, expresión regular, BigInt o literal de fecha. Los comentarios están ausentes en la gramática y los números no pueden usar hexadecimales, binarios, signos más iniciales ni separadores numéricos de JavaScript. Cada construcción prestada eventualmente alcanza un carácter que no puede comenzar ni continuar con un valor JSON válido.
La conversión requiere una decisión sobre datos en lugar de un truco de ortografía. Reemplace `undefined` con `null` solo si un valor vacío explícito coincide con el contrato de la aplicación; de lo contrario, elimine el miembro o proporcione un valor real. Codifique las fechas como cadenas acordadas, a menudo ISO 8601. Representar números no finitos según la API receptora en lugar de inventar un token JSON.
Ejemplo resuelto: convertir un volcado de consola en un JSON válido
Ejemplo resuelto: convertir un volcado de consola en JSON válido; comience con `{name: 'Ada', active: true, score: NaN, updated: new Date()}`. Cita `name`, `active`, `score` y `updated` entre comillas dobles. Cambie el valor del nombre a una cadena entre comillas dobles. Decida que una puntuación no disponible debería ser `null` y reemplace la expresión del constructor con la cadena de marca de tiempo real que debía producir. El documento ahora contiene solo JSON miembros y valores.
La forma terminada podría ser `{"name":"Ada","active":true,"score":null,"updated":"2026-03-21T10:00:00Z"}`. Valide después de cada categoría de reparación porque el primer error puede ocultar la sintaxis posterior solo de JavaScript. Al formatear el resultado aceptado se expone su estructura sin realizar ninguna conversión adicional.
La trampa inversa: JSON válida que JavaScript leería de manera diferente, como números enteros muy grandes y la clave __proto__
La trampa inversa: JSON válida aún puede adquirir comportamientos o limitaciones específicos de JavaScript después del análisis. Los números JSON no tienen un límite de precisión incorporado en la gramática, pero JSON.parse produce valores numéricos de JavaScript. Por lo tanto, un número entero que se encuentre fuera del rango seguro se puede redondear silenciosamente. Si cada dígito es importante, codifique el identificador como una cadena o utilice un analizador y un tipo de datos diseñados para preservar números de precisión arbitraria en lugar de confiar en una verificación de sintaxis exitosa.
El nombre de miembro `"__proto__"` también es válido JSON y JSON.parse lo crea como una propiedad de datos propia. Los problemas pueden comenzar más tarde si el código de la aplicación copia las propiedades analizadas en otro objeto con una asignación o un comportamiento de combinación inseguros. La validación demuestra que el texto sigue la gramática JSON; no prueba que todas las claves sean seguras para todos los consumidores.
Lo que esto no cubre
Lo que esto no cubre: JSON5, JSONC y lenguajes de configuración que aceptan deliberadamente comentarios, comas finales, nombres sin comillas o cadenas entre comillas simples. Esos formatos resuelven diferentes problemas de creación y necesitan analizadores que implementen sus propias gramáticas. Un validador estricto de JSON no debería reinterpretarlos silenciosamente, porque aceptar una sintaxis adicional haría que su resultado sea engañoso para las API, metadatos de paquetes y otros destinos que realmente requieren el estándar JSON.
Esta distinción también excluye la evaluación arbitraria de JavaScript. Ejecutar texto pegado a través de `eval` o un constructor de funciones simplemente para convertir un objeto literal en datos puede ejecutar captadores, llamadas u otras expresiones hostiles. Si la fuente es JavaScript confiable bajo su control, serialice el valor real con JSON.stringify. Si la fuente es un texto que no es de confianza, no lo ejecute.
Conclusión: un literal es código, JSON son datos
Conclusión: un literal es código, JSON son datos; la similitud visual no hace que sus gramáticas sean intercambiables. JSON requiere cadenas entre comillas dobles y nombres de miembros, permite sólo un pequeño conjunto fijo de tipos de valores y no contiene comentarios ni expresiones ejecutables. Un diagnóstico de líneas y columnas marca el primer lugar donde la fuente copiada deja esa gramática. Reparar ese punto y validarlo nuevamente es más confiable que aplicar una búsqueda y reemplazo amplia a un volcado de consola.
Cuando controlas el valor de JavaScript, genera JSON con JSON.stringify en lugar de copiar su representación de consola. Cuando reciba texto, analícelo sólo con el analizador para su formato declarado y nunca ejecútelo como acceso directo. La validación exitosa de JSON establece la sintaxis, no la precisión numérica, la conformidad del esquema o el manejo seguro de las propiedades posteriores.