El JSON minificado llega en una sola línea porque el espacio en blanco entre tokens no significa nada en JSON. Para leerlo, pásalo otra vez por un parser e imprímelo de nuevo con indentación: pega la línea en el formateador de JSON, deja la indentación de dos espacios y vuelve como un árbol. El espacio en blanco nunca es el riesgo: agregarlo o quitarlo no puede cambiar ni un solo valor. Lo que cambia las cosas es la vuelta por el parser, y uno de esos cambios pierde datos sin avisar.
Por qué llegó en una sola línea
La RFC 8259 nombra exactamente cuatro caracteres como espacio en blanco insignificante entre tokens: espacio, tabulación, salto de línea y retorno de carro. Insignificante quiere decir que el parser los salta sin mirarlos. Minificar un documento JSON no es más que borrar todos los que estén fuera de una string: el espacio dentro de una string es dato y se queda exactamente donde está.
La razón por la que alguien se toma la molestia es que la indentación ocupa una parte real de un archivo formateado. A dos espacios por nivel, una línea anidada cuatro niveles adentro carga ocho espacios iniciales más un salto de línea: nueve bytes de nada. Un archivo de 5.000 líneas cuyas líneas promedian esa profundidad arrastra 45 kB de layout antes del primer carácter de datos.
En la red importa menos de lo que sugiere esa aritmética. Cualquier cosa que sirva JSON con sensatez lo manda con gzip o brotli, y las secuencias largas de espacios idénticos son el patrón más fácil que un compresor va a encontrar en su vida. Minificar sigue ganando, solo que por un margen más chico del que insinúa el conteo de bytes.
Cómo formatearlo
Cuatro lugares, según dónde esté ya el texto.
- En el navegador. Pega y elige una indentación. Es la vía más rápida cuando el JSON salió de la pestaña de red o de un mensaje de chat y todavía no está en un archivo. También tiene un techo: el formateador de este sitio parsea en el hilo principal de la página, así que unos pocos megabytes van cómodos y una exportación de base de datos te va a dejar la pestaña trabada durante segundos o se va a quedar sin memoria.
- En tu editor. Guarda el texto con la extensión
.jsony ejecuta Format Document desde la paleta de comandos en VS Code, o el equivalente en lo que uses. La ventaja es que el editor se queda con el archivo y después te deja colapsar secciones. - En la línea de comandos.
python -m json.toollee la entrada estándar y la imprime indentada sin instalar nada.jq .hace lo mismo con indentación de dos espacios y color de sintaxis, yjq -c .vuelve para el otro lado cuando necesitas otra vez la forma compacta. - Sin formatear nada. El panel Network de Chrome tiene una pestaña Preview que muestra una respuesta JSON como un árbol plegable, y Firefox trae un visor de JSON que hace lo mismo con cualquier respuesta servida como
application/json. Para mirar una sola respuesta rápido, esto le gana a andar copiando el texto de un lado a otro.
Qué cambia la vuelta por el parser
Un formateador no espolvorea saltos de línea sobre tu texto. Parsea el documento hasta convertirlo en un valor e imprime ese valor otra vez desde cero. Todo lo que no era parte de los datos no sale del otro lado.
- Los números se normalizan.
1.0vuelve como1y1e3como1000. El valor sobrevive; la forma en que estaba escrito no. - Los escapes se reescriben a la forma legal más corta.
\u0041vuelve comoAy\u002Fcomo/, mientras que\u0009vuelve como\t. Los caracteres de control quedan escapados de las dos maneras, porque JSON los prohíbe crudos dentro de una string. - Las claves duplicadas se colapsan. La especificación dice que los nombres DEBERÍAN ser únicos y deja el resto sin definir. JavaScript y Python se quedan los dos con la última, así que una configuración con
"timeout"dos veces pierde una de las dos en el camino, normalmente sin decir una palabra. - Las claves que parecen números se mueven.
{"2":"b","1":"a"}se reimprime con"1"primero. Eso es una regla de los objetos de JavaScript más que de JSON, y es el único reordenamiento que no puedes apagar. - Los comentarios no existen. JSON no tiene, así que un archivo que los contenga nunca fue JSON y directamente no va a parsear.
El cambio que sí pierde datos
Los enteros grandes. La especificación de JSON no pone límite al tamaño ni a la precisión de un número, pero JavaScript guarda todos los números como float de 64 bits, así que los enteros por encima de 9.007.199.254.740.991 no se pueden representar todos con exactitud. Dale a un parser de JavaScript 9007199254740993 y te devuelve 9007199254740992 sin un error en ninguna parte.
Esto cae primero sobre los identificadores: IDs de base de datos, snowflakes de Discord, timestamps en nanosegundos. Por eso las APIs bien hechas mandan los IDs grandes como strings. El formateador de este sitio busca literales enteros que cambian cuando JavaScript los lee y te dice cuáles son, pero no puede repararlos: para cuando el valor existe, los dígitos ya se perdieron. Si ves esa advertencia, trata la salida formateada como insegura para volver a pegarla en cualquier cosa que importe.
Por qué el error dice línea 1, columna 4812
Esta es la manera específica en que el JSON minificado te arruina el día. Está todo en una sola línea, así que el parser informa un número de columna en los miles y no tienes dónde mirar. No puedes formatear el archivo para encontrar el problema, porque el problema es justamente la razón por la que no se formatea.
Dos salidas. Pega la línea en un editor y usa su cuadro de ir a una posición: el de VS Code acepta line:column, así que escribir 1:4812 deja el cursor sobre el carácter en cuestión. O sáltate eso y recorre la lista de cosas que suelen estar mal, porque la lista es corta:
- Una coma sobrante antes de un
}o de un]. - Strings entre comillas simples o claves sin comillas. JavaScript válido, JSON inválido.
- Una respuesta truncada, que aparece como un final de entrada inesperado justo en la última columna.
NaNoInfinityde un serializador que debería saber que eso no se hace. Ninguno de los dos es JSON legal.- Que no sea JSON en absoluto: una página de error HTML copiada de la pestaña de red, que falla en el primer
<.
Diga lo que diga la posición, recuerda que es donde el parser se dio por vencido, no donde te equivocaste. Una coma faltante se informa al comienzo de la clave siguiente, y una string sin cerrar se informa en la comilla que venga después. Mira un poco antes del número que te dieron.
Algunos archivos son casi JSON en vez de estar rotos. JSON5 y JSONC permiten comentarios y comas sobrantes, y van a fallar en cualquier formateador estricto, incluido el nuestro. NDJSON —un objeto por línea, sin array que lo envuelva— también falla, porque la segunda línea es entrada inesperada; envuelve tú mismo las líneas en un array primero. Si lo que querías en realidad era un formato de configuración que te deje escribir comentarios, la disyuntiva entre YAML y JSON es la versión honesta de esa pregunta.
Cómo leerlo una vez indentado
La indentación por sí sola no vuelve comprensible un objeto de 4.000 líneas. Dos cosas ayudan antes de que empieces a desplazarte.
La primera es la forma. La profundidad de anidamiento y la cantidad de claves te dicen qué problema tienes: un payload de cinco niveles con cuarenta claves se lee muy distinto de uno de dos niveles con cuatro mil. El formateador imprime la profundidad y la cantidad de claves arriba de la salida, que es la forma más barata de averiguar cuál de los dos tienes antes de ponerte a desplazarte.
La segunda es el ordenamiento. Ordenar las claves alfabéticamente hace que un objeto desconocido se pueda buscar, y es seguro por definición, porque los miembros de un objeto no tienen orden. También es destructivo de una manera que importa en los archivos que la gente mantiene: la agrupación del autor casi siempre significaba algo. Ordena una respuesta que estés inspeccionando, no un archivo de configuración que estás por commitear.
El ordenamiento se gana el sueldo cuando comparas dos payloads. Formatea los dos con las claves ordenadas y después pásalos por un diff línea por línea: sin ordenar, obtienes un diff lleno de líneas que solo se movieron, y el único campo que de verdad cambió queda enterrado ahí.
Y si el JSON resulta ser un array plano de objetos —una lista de filas con las mismas claves—, la indentación es la vista completamente equivocada. Trescientos registros son ilegibles como árbol y obvios como tabla, que es para lo que sirve convertir JSON a CSV, junto con los campos que se pierden cuando lo haces.
Dónde aparece una y otra vez el JSON minificado
Las respuestas de API son la fuente obvia, pero no la única. Cualquier cosa escrita en localStorage o en un atributo data- pasó por JSON.stringify, que no agrega espacio en blanco salvo que se lo pidas. Las líneas de log estructurado se minifican para que un evento quede en una sola línea. Y el segmento del medio de un JWT es JSON minificado codificado en base64url, y por eso decodificar un token te entrega un muro de texto: recuperas el JSON, todavía en una sola línea, y todavía tienes que indentarlo.
Todos ellos hacen bien en quedarse minificados donde viven. La idea no es ordenar el origen: es tener una copia legible delante durante los dos minutos que la necesitas, y después tirarla.
El formateador de JSON de este sitio hace el ciclo entero en un solo lugar: indenta o minifica, señala la línea y la columna cuando la entrada no parsea, y te avisa de las claves duplicadas y los enteros demasiado grandes que parsean sin problema y te cuestan una tarde igual. Corre en tu pestaña, así que el payload que estás depurando no se sube a ningún lado.
Si el texto que intentas leer salió de un token y no de una API, qué hay realmente dentro de un JWT cubre el paso de decodificación que viene primero y, más útil todavía, por qué leer los claims no prueba nada sobre si son verdaderos.
Preguntas frecuentes
¿Cómo formateo JSON minificado?
Pásalo por un parser que imprima el valor otra vez con indentación. Un formateador en el navegador, el comando Format Document de VS Code, o las herramientas de línea de comandos "python -m json.tool" y "jq ." lo hacen todas. El espacio en blanco entre tokens no significa nada en JSON, así que la indentación en sí no cambia nada, aunque la vuelta por el parser sí puede normalizar números y descartar claves duplicadas.
¿Hay alguna diferencia entre JSON minificado y JSON formateado?
Para un parser, no. El espacio, la tabulación, el salto de línea y el retorno de carro entre tokens son insignificantes, así que las dos formas describen el mismo valor. Las únicas diferencias son el tamaño del archivo y si una persona puede leerlo.
¿Por qué mi error de JSON dice línea 1 con un número de columna enorme?
Porque el documento entero está en una sola línea, así que el parser solo puede informar cuántos caracteres recorrió antes de detenerse. Pega el texto en un editor y usa su cuadro de ir a una posición, que en VS Code acepta un par line:column. Mira también un poco antes de la posición informada, porque un parser solo falla cuando llega a algo que no puede venir a continuación.
¿Formatear JSON cambia los datos?
El espacio en blanco en sí no, pero la vuelta por el parser sí puede. Los números se normalizan, así que 1.0 se convierte en 1, los escapes como \u0041 se convierten en los caracteres que representan, y las claves duplicadas se colapsan en la última. Por encima de 9.007.199.254.740.991 los enteros ya no se pueden guardar todos con exactitud, así que algunos vuelven redondeados en cualquier herramienta basada en JavaScript.
¿Puedo formatear JSON que tiene comentarios?
No, porque un archivo con comentarios no es JSON. Los comentarios lo convierten en JSONC o JSON5, y un parser estricto los rechaza junto con las comas sobrantes y las strings entre comillas simples. Quita primero los comentarios, o usa una herramienta hecha para el formato que tu cargador de configuración espera de verdad.
¿Es seguro pegar JSON en un formateador online?
Depende enteramente de si la página sube tu texto. Muchos formateadores lo mandan a un servidor, lo cual es un problema cuando el payload contiene datos de clientes o un token de acceso. Las herramientas que parsean en el navegador no transmiten nada, así que el contenido se queda en tu máquina.
Última actualización 19 de septiembre de 2026