Analizar JSON
El inspector JSON comprueba la sintaxis RFC 8259 en tu navegador e informa de los recuentos por tipo, la profundidad y las equivalencias entre lenguajes. También muestra qué tokens numéricos originales cambiarían al convertirse a Number de JavaScript. La inspección no cambia el texto original; los conversores de valores rechazan esas conversiones inseguras.
Pega un documento JSON o haz clic en «Cargar ejemplo» para analizar su estructura.
¿Cómo funciona Analizar JSON?
“¿Analiza?” es la pregunta que responde el validador. Esta herramienta responde a la siguiente, que suele ser la más interesante: ¿en qué se analizó? Un documento puede ser perfectamente válido y aun así no ser lo que tu código espera, y esa diferencia rara vez se ve a simple lectura.
El parser está escrito a mano en lugar de llamar a JSON.parse. Usa una pila explícita e iterativa para inspeccionar documentos profundamente anidados sin desbordar la pila de llamadas. Rechaza el contenido posterior al valor raíz y asigna cada clave como propiedad propia mediante una protección: __proto__ se conserva como clave normal en vez de modificar el prototipo del objeto.
El análisis recorre entonces el valor analizado y cuenta lo que hay: cuántos objetos, arrays, cadenas, números, booleanos y nulls, hasta dónde llega el anidamiento y cuántas claves distintas aparecen. Eso suele bastar por sí solo para detectar el problema — un array que esperabas lleno de objetos y solo contiene cadenas, una estructura tres niveles más profunda de lo que el esquema permite, un documento que es 90% nulls porque falló un join aguas arriba.
JSON tiene un único tipo numérico. JSON.parse de JavaScript lo convierte a un double IEEE-754, que representa todos los enteros exactamente solo hasta 2^53−1. Por ejemplo, 9007199254740993 se convierte en 9007199254740992 sin un error de sintaxis nativo. Este inspector comprueba los tokens numéricos originales, incluidos decimales y exponentes, y señala los cambios de valor decimal como riesgos de conversión. Cuenta la estructura sin exportar valores redondeados. El Formateador JSON y el Minificador JSON conservan los tokens originales; los conversores de valores rechazan esos números inseguros.
La misma tabla muestra el resto del mapeo, porque los supuestos cambian según el lenguaje. Go te da float64 para cada número, salvo que decodifiques a un struct tipado. Python distingue int de float y por eso conserva los enteros grandes con exactitud. Java y C# recurren a BigDecimal o decimal cuando están configurados para ello.
Documento
{ "id": 9007199254740993, "price": 0.1 }Estructura y riesgo numérico
3 values · depth 1 · 2 distinct keys number 2 → number (IEEE-754 double) JavaScript Number conversion risk (source unchanged): 9007199254740993 → 9007199254740992
Documento → Estructura y riesgo numérico
Documento
{
"id": 42,
"name": "Ada"
"active": true
}Estructura y riesgo numérico
Missing comma between object key-value pairs. Line 4, column 3 "active": true ^
¿Qué opciones y casos límite admite Analizar JSON?
| Parámetro | Tipo | Valor predeterminado | Comportamiento y casos límite |
|---|---|---|---|
| Gramática | RFC 8259 | estricto | Sin comentarios, comas finales, comillas simples, claves sin comillas, NaN ni Infinity. Estas son reglas de sintaxis JSON; una API puede exigir además un esquema o límites propios de tamaño y números. JSON5 y JSONC se rechazan. |
| Contenido final | rechazado | — | RFC 8259 §2 define un documento como exactamente un valor. Dos objetos concatenados son un síntoma común de una línea de registro que se dividió incorrectamente, y se informa en lugar de truncarse silenciosamente en la primera. |
| Precisión numérica | IEEE-754 | señalado | Los tokens numéricos originales se comparan con su conversión decimal de ida y vuelta a Number de JavaScript. Se señalan enteros y decimales alterados, desbordamientos y valores que se reducen a cero. El texto original no cambia y no se exporta un documento redondeado. |
| Claves duplicadas | gana la última | — | RFC 8259 deja esto sin definir; casi todos los analizadores mantienen la última ocurrencia, y este coincide con eso. Vale la pena saberlo, porque es una superficie de ataque real cuando dos sistemas en una cadena no están de acuerdo. |
| __proto__ | propiedad propia | — | Asignado mediante defineProperty, por lo que se convierte en una clave normal en lugar de volver a apuntar al prototipo. Coincide con JSON.parse, y es el guardián que la mayoría de los analizadores hechos a mano están omitiendo. |
| Profundidad de anidamiento | iterativo | sin límite | El analizador utiliza una pila explícita, por lo que la profundidad está limitada por la memoria en lugar de por la pila de llamadas. Un documento de 20,000 niveles está cubierto por una prueba. |
| Unicode | UTF-8 | — | Las secuencias de escape \uXXXX se decodifican, y los pares de sustitución se recombinan para que los caracteres astrales sobrevivan. Una marca de orden de bytes antes del elemento raíz se informa en lugar de tratarse como contenido. |
| Tamaño de entrada | bytes | 8 MB | Límite en el hilo principal. Por encima de él, el análisis se rechaza en lugar de intentarse. No se sube nada en ningún tamaño. |
Preguntas frecuentes
¿En qué se diferencia esto del validador de JSON?
El validador se centra en los errores de sintaxis JSON y su reparación. Este inspector también informa de tipos, profundidad, claves distintas, equivalencias entre lenguajes y riesgos de conversión numérica. Un JSON válido puede contener números que JavaScript no conserva al convertirlos; la inspección muestra el token original y una vista previa de Number claramente identificada sin cambiar el documento.
Mi ID cambió de valor tras el análisis. ¿Qué ocurrió?
JSON.parse nativo de JavaScript usa números IEEE-754 y puede redondear ID grandes sin un error de sintaxis: 9007199254740993 se convierte en 9007199254740992. Este inspector muestra ese riesgo a partir del token original. Los conversores de valores de ToolsByUs rechazan conversiones que perderían dígitos, mientras que el Formateador y el Minificador conservan el texto. Para transportarlos entre sistemas, envía los ID exactos como cadenas o usa un parser con enteros de precisión arbitraria, como el decodificador JSON predeterminado de Python.
¿Qué pasa con las claves duplicadas?
Gana la última aparición, que es lo que hacen casi todos los parsers y lo que el RFC 8259 se niega a especificar. Merece conocerse en lugar de ignorarse: si dos sistemas de una cadena de peticiones resuelven los duplicados de forma distinta, una carga puede validarse según una interpretación y ejecutarse según otra, lo cual es una clase genuina de bug de seguridad.
¿Por qué rechaza mi JSON con comentarios?
Porque el RFC 8259 no tiene comentarios, y el objetivo de un parser estricto es decirte qué aceptará una API. Si tu archivo es una configuración — tsconfig.json, .eslintrc.json — es JSONC, y «Formatear JSON» acepta comentarios y comas finales, y puede eliminártelos.
¿0.1 es exactamente 0.1 después del análisis?
No, y no es un problema de JSON — es la coma flotante binaria. 0.1 no tiene representación exacta como double en ningún lenguaje, por lo que el famoso 0.1 + 0.2 no es 0.3. Para dinero, la respuesta estándar es llevar unidades menores enteras (peniques, centavos) o una cadena decimal, nunca un float.
¿Se envía mi documento a algún sitio?
No. El análisis se ejecuta en tu navegador sin subir el documento. Una vez cargada esta página y sus recursos, la propia inspección JSON funciona sin conexión a la red.