Formatear JSON

Pega JSON y léelo. Se analiza con el analizador que el navegador trae incorporado y se vuelve a escribir con el sangrado que elijas, de modo que lo que sale es exactamente el mismo documento — no un texto al que se le han metido saltos de línea. Nada se sube: si lo que estás mirando es la respuesta de una API con datos de clientes, se queda en tu pestaña.

Útil antes de comparar. El orden de un array no se toca nunca: un array es una secuencia.

Resultado

La respuesta aparece aquí mientras escribes.

  • Dónde se ejecuta

    No se sube nada, porque no hay archivo: se calcula en esta misma página.

  • Sin cola y sin cuenta

    Responde tan rápido como dé tu máquina, y nunca pregunta quién eres.

  • Tantas veces como quieras

    No se cuenta nada ni se limita nada: volver a responder no nos cuesta nada.

Cómo funciona

  1. Pega el JSON en el campo.
  2. Elige el sangrado y, si vas a comparar dos documentos, ordena las claves.
  3. Copia el resultado. No ha salido del equipo.

Se analiza, no se maquilla

Formatear aquí significa leer el documento entero y volver a escribirlo. La alternativa barata — ir metiendo saltos de línea y espacios donde aparece una llave — funciona hasta que una cadena contiene una llave, y entonces destroza el documento de una forma que sigue pareciendo JSON.

La consecuencia útil es que el formateo también es una comprobación. Si sale algo, el documento era válido; si no, no lo era, y para eso está la página de validación, que te dice en qué línea se atasca. Un formateador que nunca falla es un formateador que no está leyendo lo que le das.

Dos espacios, cuatro o un tabulador

Dos espacios es lo que escribe `JSON.stringify` cuando se le pide sangrado y lo que usan por defecto casi todas las herramientas de JavaScript. Cuatro viene del mundo de Python y de Java. El tabulador ahorra bytes y deja que cada cual elija la anchura en su editor.

Ninguna de las tres cambia el documento: para un analizador, el espacio en blanco entre elementos no existe. Importa solo si el resultado va a un repositorio, donde una mezcla de convenciones produce diferencias en líneas que nadie tocó — el motivo por el que conviene fijar una y que la fije la herramienta y no la persona.

El orden de las claves y el orden de los arrays

Un objeto JSON no tiene orden definido, así que dos servicios pueden devolver los mismos datos con las claves en distinta posición. Ordenarlas alfabéticamente convierte una comparación de textos en una comparación útil, que es justo lo que hace falta antes de un diff o de un test de contrato.

Un array es lo contrario: su orden es parte del dato. Aquí no se toca nunca, y esa asimetría es deliberada. Una herramienta que ordenase también los arrays produciría documentos que se comparan bien y significan otra cosa, que es la peor combinación posible.

Dónde empiezan a sufrir los números

JSON escribe los números como texto y JavaScript los lee como coma flotante de doble precisión. Los enteros por encima de 9.007.199.254.740.991 pierden cifras: un identificador de 19 dígitos vuelve distinto, y como el resultado sigue pareciendo un número válido no lo nota nadie.

Afecta a cualquier procesamiento que pase por un analizador de JavaScript, este incluido, y se avisa cuando ocurre. El disparador habitual son los identificadores tipo snowflake de Twitter y Discord y algunas secuencias de base de datos. La solución está en quien los genera: esos valores deben ir como cadena, y entonces atraviesan cualquier etapa sin cambiar.

Lo que JSON no tiene

No hay comentarios, no hay comas finales, no hay comillas simples y no hay claves sin comillas. Cada una de esas cosas es una costumbre traída de JavaScript, y cada una deja al analizador parado con un mensaje que casi nunca señala el sitio correcto.

Quien necesite comentarios en una configuración tiene tres salidas: usar un formato que los admita — YAML, TOML, JSON5 —, meter un campo `_comment` que se ignore a propósito, o quitarlos antes de procesar. La tercera es la más extendida y la más frágil, porque una barra doble también aparece dentro de una URL.

Las tildes y las eñes sobreviven

El resultado sale en UTF-8 tal cual, sin convertir los caracteres no ASCII en secuencias de escape `\uXXXX`. Ambas formas son JSON válido y significan lo mismo, pero la primera se lee y la segunda no: un nombre con eñe escrito como `\u00f1` es correcto y es ilegible.

Algunas bibliotecas escapan por defecto porque asumen que el transporte no es limpio, lo cual dejó de ser cierto hace tiempo. Si tus datos llegan con esas secuencias, este formateador no las convierte de vuelta — son parte del documento tal y como lo recibiste, y cambiarlas sería reescribir el dato y no su presentación.

Para qué sirve, y para qué no

Esta página resuelve un problema de lectura: hay un documento delante y no se ve su forma. Es lo que hace falta cuando llega una respuesta de API en una línea, cuando un campo de registro lleva JSON dentro o cuando alguien pega un blob de configuración en un ticket.

No resuelve el problema contrario. Para dejarlo en una línea está la página de minificar, y para averiguar por qué algo lo rechaza está la de validar, que da la línea y la columna. Las tres comparten motor y están separadas porque son tres momentos distintos con tres preguntas distintas.

Formateado en el repositorio, minificado al salir

Un JSON minificado dentro de un fichero versionado convierte cualquier cambio en una línea modificada. El diff pasa a ser todo o nada, la revisión se vuelve imposible y un conflicto de fusión afecta al documento entero en lugar de a los dos campos de los que iba.

El reparto que funciona es el evidente: formateado en el repositorio, minificado al servir. Entre los dos estados está exactamente el paso que un proceso de compilación debería dar solo, y ninguna de las dos formas es la correcta en abstracto — lo son en su sitio.

Qué significa esto para el RGPD

Un payload JSON contiene con frecuencia justo lo que no conviene mover: registros de clientes, datos de pedidos, un webhook con direcciones dentro. Como aquí se analiza y se reescribe en la propia página, no hay comunicación a nosotros y por tanto tampoco encargo de tratamiento sobre ese contenido.

Se demuestra en el panel de red: mientras la usas no sale ninguna petición que lleve tu documento. Es la razón por la que esta herramienta se puede usar donde una versión con servidor chocaría con una política interna, y comprobarlo cuesta un minuto.

Formatear JSON: preguntas frecuentes

¿Cambia el formateo mi documento?

No. Se analiza y se vuelve a escribir, así que la estructura de datos es idéntica; solo cambia el espacio en blanco entre elementos, que para un analizador no existe. El orden de los arrays no se toca nunca.

¿Qué sangrado debería usar?

Dos espacios si el destino es JavaScript, cuatro si viene del mundo de Python o Java, un tabulador si quieres que cada cual elija la anchura. Para un analizador da igual; importa solo si el resultado va a un repositorio.

¿Por qué cambia mi identificador largo?

Porque JavaScript lee los números como coma flotante de doble precisión y los enteros por encima de 9.007.199.254.740.991 pierden cifras. Esos identificadores deberían viajar como cadena en JSON; entonces atraviesan cualquier etapa sin cambiar.

¿Por qué se rechaza mi JSON con comentarios?

Porque JSON no los tiene. Tampoco comas finales ni claves sin comillas. Si necesitas comentarios en una configuración, el formato adecuado es YAML, TOML o JSON5.

¿Se sube mi documento?

No. Se analiza y se escribe en esta página, en tu navegador. El panel de red es la forma de comprobarlo: mientras la usas no sale ninguna petición que lleve tu JSON.

Otras herramientas