tooly

Formatear y validar JSON

Pega JSON para embellecerlo con la sangría que prefieras o minifícalo para producción. Los errores de sintaxis se indican con la línea y columna exactas. Funciona totalmente sin conexión en tu navegador.

Todo funciona en tu navegador — no se envía nada

Cómo se usa

  1. 1

    Pega tu JSON en el recuadro.

  2. 2

    Haz clic en Formatear para embellecer o en Minificar para quitar espacios.

  3. 3

    Copia el resultado o descárgalo como archivo .json.

De dónde sale el JSON desordenado

La mayor parte del JSON que te encuentras en la práctica lo ha escrito un programa para otro programa, así que llega en una sola línea larga: una respuesta de API copiada de la pestaña de red del navegador, la carga de un webhook en un archivo de registro, un valor de configuración guardado en una columna de una base de datos. Leer una línea de 4000 caracteres para encontrar un campo anidado es lento y propenso a errores. Formatearlo pone cada clave en su propia línea y sangra cada nivel, así que la estructura se ve de un vistazo.

Lo contrario es igual de habitual. Antes de pegar JSON en una variable de entorno, una cadena de consulta, un fixture de pruebas o un mensaje de chat, a menudo lo quieres lo más compacto posible. Minificar elimina todos los espacios y saltos de línea que quedan fuera de los valores de texto; un archivo de configuración típico con sangría se reduce entre un 20 y un 40 por ciento, según lo profundo que sea su anidamiento.

Qué hace el formateador con tus datos

La entrada se analiza con el parser JSON nativo del navegador y se vuelve a escribir con la sangría que elijas: 2 espacios, 4 espacios o un tabulador. Minificar sigue el mismo camino sin ninguna sangría. Como el documento se reconstruye a partir del valor analizado en lugar de editarse como texto, algunos detalles pueden cambiar, y conviene saber cuáles:

  • La notación de los números se normaliza. 1.0 pasa a ser 1, 1e3 pasa a ser 1000 y -0 pasa a ser 0. El valor es el mismo; la forma de escribirlo, no.
  • Los enteros muy grandes pierden precisión. JavaScript guarda los números como flotantes de 64 bits, que solo son exactos hasta 9 007 199 254 740 991. Un ID de 19 dígitos como 12345678901234567890 vuelve como 12345678901234567000. Si tus datos tienen IDs de tipo Snowflake, bigints de base de datos o importes de pago en unidades mínimas a esa escala, compara el resultado antes de usarlo.
  • Los escapes Unicode se decodifican. "caf\u00e9" se vuelve a escribir como "café". Ambos son JSON válido y significan la misma cadena.
  • Las claves duplicadas se funden. Si un objeto contiene la misma clave dos veces, solo sobrevive el último valor. El estándar JSON deja los duplicados sin definir, y la mayoría de los parsers se comportan así.
  • Las claves que parecen enteros pasan delante. Las claves que parecen números enteros no negativos, como "2" o "10", se colocan primero en orden ascendente, antes que todas las demás. Es una regla de los objetos de JavaScript, no de JSON. Las claves de texto normales mantienen su orden original.

Nada de esto importa en las cargas de API típicas, pero sí si vas a hacer commit de un archivo formateado y quieres un diff mínimo.

Cómo leer la posición del error

Cuando el análisis falla, la herramienta ejecuta su propio pequeño escáner para encontrar el primer carácter que no puede continuar un documento válido, y lo indica como línea y columna.

El punto indicado es donde el parser se rindió, que no siempre es donde se cometió el error:

  • Una coma final en [1, 2, ] se indica en el corchete de cierre, porque ahí se esperaba un valor.
  • Una coma que falta entre dos propiedades se indica al principio de la segunda clave.
  • Una llave o un corchete de cierre que falta se indica al final de toda la entrada, a veces cientos de líneas por debajo del problema real. Busca el último objeto o array que se abrió.
  • Una cadena a la que le falta la comilla de cierre se indica al final de su línea, porque un salto de línea sin escapar no está permitido dentro de una cadena JSON. La misma posición aparece con texto de varias líneas pegado en un valor; ahí los saltos de línea deben escribirse como \n.

Si la entrada no es realmente JSON sino un literal de objeto de JavaScript, YAML o un diccionario de Python impreso con comillas simples, el error aparecerá en la primera o segunda línea. Esos formatos se parecen, pero no son intercambiables.

Elegir la sangría

  • 2 espacios es el valor por defecto en la mayoría de las herramientas de JavaScript, en los archivos package.json y en muchas guías de estilo. Evita que los datos muy anidados se salgan por el borde derecho de la pantalla.
  • 4 espacios coincide con lo que produce json.dumps(indent=4) de Python y se lee más fácilmente en documentos poco profundos.
  • Tabulador permite que cada lector elija el ancho visual en su editor y produce archivos algo más pequeños que 4 espacios.

En los archivos que viven en un repositorio, usa lo que ya use el proyecto; mezclar estilos llena de ruido cada diff.

Siguientes pasos con los datos formateados

Una vez que la estructura es legible, otras tareas se vuelven más fáciles. Para pasar un array de registros a una hoja de cálculo, conviértelo con JSON a CSV. Para ver exactamente qué ha cambiado entre dos versiones de una carga, formatea ambas con la misma sangría y compáralas en comparar textos; con un formato idéntico, el diff solo muestra los cambios reales. Todo ocurre en la página, así que los tokens y los datos personales de una carga se quedan en tu dispositivo.

Preguntas frecuentes

¿Se sube mi JSON?

No. El análisis y el formateo se ejecutan en tu navegador, así que las claves de API o datos privados del JSON nunca salen de tu equipo.

¿Por qué dice que mi JSON no es válido?

Causas habituales: comas finales, comillas simples en vez de dobles, comentarios o claves sin comillas. El mensaje de error indica la línea y la columna.

¿Conserva el orden de las claves?

Sí, las claves mantienen el orden en que aparecen en la entrada, salvo las claves que parecen enteros, como "2" o "10", que JavaScript mueve al principio en orden ascendente.

¿Qué tamaño de archivo puedo formatear?

Varios megabytes sin problema. Los archivos muy grandes pueden tardar un momento porque todo el documento se analiza en memoria.

Herramientas relacionadas