Cómo usarlo
En «Modo» eliges una de estas tres cosas:
- Formatear: parte el JSON en líneas y lo sangra para que se vea la estructura. La sangría se elige en la lista: «2 espacios», «4 espacios» o «Tabulador».
- Minificar: quita todos los espacios y saltos de línea entre valores y lo deja en una sola línea. En este modo la lista de sangría desaparece.
- Validar: el resultado es idéntico al de Formatear, con un añadido: si la sintaxis es correcta aparece el distintivo «Esto es JSON válido.». Si Formatear o Minificar te han dado un resultado, esa entrada ya ha pasado la comprobación de sintaxis.
Las casillas valen para los tres modos:
- Ordenar claves: ordena las claves de todos los objetos, también los anidados, por código de carácter. Las mayúsculas van antes que las minúsculas, y las letras de la A a la Z (sin tilde) antes que los caracteres que no son ASCII, como
é,가o日.{"z":1,"a":{"c":2,"b":3}}pasa a ser{"a":{"b":3,"c":2},"z":1}. El orden dentro de los arrays no se toca. - Escapar caracteres no ASCII (\uXXXX): escribe en notación
\uXXXXlos caracteres que no son ASCII, como las letras con tilde y los emojis."é😀"se convierte en"\u00e9\ud83d\ude00". El emoji ocupa dos códigos. - Permitir comentarios y comas finales (JSON5/JSONC): tiene su propio apartado más abajo.
Debajo del resultado hay tres cifras. «Claves» cuenta todas las claves, incluidas las de los objetos anidados; «Profundidad» cuenta la llave o el corchete más externo como 1; y «Tamaño» son los bytes en UTF-8 del resultado, no de lo que pegaste. Al formatear {"order":{"id":1001,"items":[{"sku":"A1","qty":2}],"paid":true}} con 2 espacios salen 6 claves, profundidad 4 y un tamaño de 129B. Si cambias a Minificar con la misma entrada, solo baja el tamaño.
Mismo valor, distinta forma de escribirlo
La herramienta lee la entrada con el intérprete de JSON del navegador (JSON.parse) y después la vuelve a escribir. Por eso no cambian solo los espacios: cuando un valor admite varias grafías equivalentes, todas acaban en la misma.
| Entrada | Resultado |
|---|---|
1.0 |
1 |
0.10 |
0.1 |
1e2 |
100 |
1E-7 |
1e-7 |
-0 |
0 |
"\u00e9" |
"é" |
"a\/b" |
"a/b" |
El número y el contenido de la cadena son los mismos, pero la diferencia se nota si vas a comparar el resultado con el original carácter a carácter: al verificar una firma, al comparar hashes o en un diff línea a línea. El único caso en que se pierde algo es -0, que se queda sin signo. Tenlo presente si los datos van a un programa que distingue el cero negativo.
Tres avisos para cuando el valor sí cambia
Hay entradas que no dan error y, sin embargo, salen con un valor distinto del original. La herramienta avisa de tres de esos casos con una advertencia junto al resultado. El resultado aparece igualmente.
- Enteros de más de 15 dígitos: los números de JavaScript solo guardan enteros con exactitud hasta 2^53 - 1 (9007199254740991). Con
{"id":9007199254740993}el resultado es9007199254740992: la última cifra ha cambiado. El aviso no comprueba si el valor ha cambiado de verdad, sino cuántas cifras tiene (enteros de 16 dígitos o más), así que también salta con1234567890123456, un entero de 16 dígitos que se conserva intacto. No cuentan los números con decimales o exponente ni los que están dentro de una cadena. Si necesitas conservar un ID grande tal cual, quien genera los datos tiene que enviarlo como cadena ("id":"9007199254740993"). - Números fuera del rango representable: un número desmesurado como
1e400se convierte ennullen el resultado. - Claves repetidas en un mismo objeto:
{"a":1,"a":2}se queda en{"a":2}. El primer valor desaparece y solo sobrevive el último. El aviso enumera hasta cinco de las claves repetidas.
Cómo leer la posición del error
Si la sintaxis falla, en lugar del resultado aparece un mensaje como «Esto no es JSON válido. Revisa cerca de la línea 3, columna 21.», acompañado de esa línea, las de alrededor y una marca ^.
2 | "name": "a",
3 | "tags": ["x", "y",]
| ^
4 | }
La marca ^ señala el primer carácter con el que el intérprete ya no pudo seguir. La causa está ahí mismo o justo antes. En el ejemplo, ^ apunta al ], pero lo que hay que corregir es la coma anterior. Solo se muestra el primer error que se encuentra, así que al arreglarlo puede asomar el siguiente.
Estos son los tropiezos más habituales:
- Una coma después del último elemento:
[1, 2, 3,] - Cadenas con comillas simples o claves sin comillas:
{'a': 1},{a: 1} - Comentarios
//o/* */ - Números con un cero delante:
01 - Valores que no existen en JSON, como
NaNoundefined - Un salto de línea escrito tal cual dentro de una cadena (hay que ponerlo como
\n)
De toda la lista, solo las comas y los comentarios se pueden pasar por alto con la opción de abajo. Lo demás hay que corregirlo a mano.
Qué hace la opción de comentarios y comas finales
El JSON estándar (RFC 8259, ECMA-404) no admite comentarios ni una coma detrás del último elemento (lo que en inglés se llama trailing comma). Aun así, en archivos que se editan a mano, como la configuración de un editor, es corriente usar variantes que sí los aceptan: JSONC (JSON with Comments) o JSON5. Al marcar «Permitir comentarios y comas finales (JSON5/JSONC)», la herramienta elimina antes de analizar los comentarios //, los comentarios /* */ y la coma que quede justo antes de un corchete o una llave de cierre. Los // y las comas que están dentro de una cadena no se borran, de modo que un valor como "http://x//y" se queda igual.
Conviene saber tres cosas:
- Solo cubre comentarios y comas. Las comillas simples y las claves sin comillas, que JSON5 también permite, siguen dando error con la opción marcada.
- El resultado es JSON estándar y no lleva comentarios. No sirve para retocar la sangría de un archivo conservando sus comentarios.
- Si hay un error con la opción marcada, el fragmento que se muestra sigue siendo tu entrada tal como estaba antes de quitar los comentarios. Los números de línea y de columna también se refieren al original, así que un comentario
/* */situado antes del error en esa misma línea no desplaza la columna.
Si lo que quieres es comprobar que unos datos recibidos son JSON estándar, deja la opción sin marcar. Con ella marcada, una entrada con comentarios también pasa.
