Saltar al contenido

Formateador de JSON

Formatea o minifica JSON e indica línea y columna del error. Ordena claves, escapa Unicode, admite comentarios y avisa de enteros grandes y claves duplicadas.

0 caracteres · 0 líneas
Modo

0 caracteres · 0 líneas

Lo que introduces se procesa solo en este navegador y nunca se envía a un servidor. Cómo funciona

Un objeto JSON en una línea se formatea con saltos de línea y sangría

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 \uXXXX los 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 es 9007199254740992: 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 con 1234567890123456, 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 1e400 se convierte en null en 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 NaN o undefined
  • 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.

Fuentes

Preguntas frecuentes

¿Comprueba solo la sintaxis o también valida contra un JSON Schema?

Solo la sintaxis (RFC 8259, ECMA-404): que llaves y corchetes casen, que las cadenas lleven comillas dobles, que las comas estén donde toca. No mira si están los campos que exige un esquema concreto ni si cada valor tiene el tipo correcto, así que un documento puede salir como JSON válido en el modo Validar y aun así incumplir tu esquema.

No he marcado «Ordenar claves» y aun así el orden de las claves ha cambiado. ¿Por qué?

Pasa cuando hay claves con forma de número entero igual o mayor que 0. El intérprete de JSON del navegador las agrupa al principio, de menor a mayor. Con {"b":1,"a":2,"10":0,"2":0} el resultado sale en el orden 2, 10, b, a aunque no ordenes nada. Si marcas «Ordenar claves», esas claves numéricas siguen yendo primero y de menor a mayor, y solo el resto se ordena por código de carácter.

¿Puedo pegar un log con un JSON por línea (JSON Lines) y formatearlo todo de golpe?

No. La herramienta lee toda la entrada como un único valor, y si hay dos seguidos falla justo donde empieza el segundo. Por ejemplo, con {"a":1} en la primera línea y {"b":2} en la segunda, el error apunta a la línea 2, columna 1. Pega las líneas de una en una, o envuélvelo todo entre corchetes y separa las líneas con comas para convertirlo en un array.

¿Qué tamaño máximo de JSON admite?

Si la entrada pasa de 10 MB, ni siquiera intenta analizarla: solo avisa de que es demasiado grande. Aparte del tamaño, una entrada con muchísimos niveles de llaves o corchetes anidados puede chocar con el límite del propio navegador y dar el error de anidamiento demasiado profundo. Ese límite cambia de un navegador a otro.

Última actualización: