JSON es un formato estricto que parece indulgente, y por eso se pierde tanto tiempo con él. Un formateador hace dos trabajos: convierte un muro de texto minificado en algo legible y te dice exactamente dónde se rindió el analizador. Normalmente vienes por el segundo.
Las cuatro cosas que JSON no permite
Casi todos los fallos de análisis son uno de los mismos cuatro errores, todos perfectamente legales en JavaScript e ilegales en JSON. La coma después del último elemento. Comillas simples en lugar de dobles. Claves sin comillas: {name: "x"} es un literal de objeto de JavaScript, no JSON. Y los comentarios, que el formato no ha admitido en ningún momento de su vida.
Este último pilla a quien configura herramientas. Si un archivo de configuración acepta comentarios, no es JSON: es JSON5 o JSONC, formatos idénticos a la vista hasta que un analizador estricto se niega a leerlos. Los valores NaN e Infinity también quedan fuera, y por eso serializar el resultado de una división puede producir algo que ningún analizador aceptará de vuelta.
Formatear puede reordenarte las claves en silencio
Esto sorprende, y conviene saberlo antes de pegar un archivo de vuelta en producción. Cualquier herramienta que formatea JSON lo analiza en memoria y lo vuelve a serializar. Con las claves de texto normales ese viaje de ida y vuelta conserva el orden de inserción y nada se mueve. Pero las claves que parecen enteros no negativos son especiales: JavaScript las enumera primero, en orden numérico ascendente, sin importar dónde estuvieran en tu archivo.
Así que {"10":"a","2":"b","name":"c"} vuelve como {"2":"b","10":"a","name":"c"}. Los datos son idénticos y cualquier analizador estará de acuerdo, pero un diff línea a línea se encenderá entero. Si formateas un archivo versionado e indexado por IDs numéricos, cuenta con ese ruido.
Los enteros grandes pierden precisión, en silencio
Este causa errores reales en producción. JSON no tiene tipo entero: tiene números, y JavaScript representa cada número como un flotante de 64 bits. Eso te da enteros exactos solo hasta 9007199254740991, es decir 2^53−1. Más allá, los valores se redondean en silencio al representable más cercano.
Pega {"id":9007199254740993} en cualquier herramienta JSON basada en navegador y te devolverá 9007199254740992. Ningún error. Ningún aviso. El ID simplemente está mal ahora. Por eso las APIs que manejan identificadores grandes —Twitter/X, Discord, los IDs snowflake de bases de datos— los envían como cadenas. Si tu JSON contiene IDs por encima de ese límite como números desnudos, no lo hagas pasar por ninguna herramienta JavaScript, incluida esta.
Minificar vale menos de lo que crees
Quitar los espacios de un JSON recorta normalmente entre un 10% y un 20% del tamaño en bruto, lo que suena útil hasta que recuerdas que tu servidor casi con seguridad lo sirve comprimido con gzip o brotli. Los algoritmos de compresión son buenísimos con los espacios repetitivos: para ellos son casi gratis. Después de comprimir, la diferencia entre JSON formateado y minificado suele ser de un par de puntos porcentuales.
Minifica cuando metas JSON en una URL, en un atributo data o donde no vaya a comprimirse. Para una respuesta de API sobre HTTP, la legibilidad en el panel de red suele valer más que los bytes.
Preguntas frecuentes
¿Se envía mi JSON a un servidor?
No. Esta herramienta está marcada como "client": el análisis y el formateo se ejecutan en la pestaña de tu navegador, y el texto nunca sale de tu máquina. Dicho esto, el JSON pegado desde un sistema real suele contener tokens, fichas de clientes o identificadores internos; si es tu caso, usa un editor que controle tu organización en lugar de cualquier página web gratuita, esta incluida.
El error dice "position 1247", ¿cómo la encuentro?
Ese número es un desplazamiento en caracteres desde el inicio de la entrada, no un número de línea, lo que lo hace incómodo de usar a mano. Formatea primero el documento: una vez indentado, el analizador señala el fallo contra una estructura legible y la línea culpable suele saltar a la vista. También conviene saber que la posición indicada es donde el analizador notó el problema, no siempre donde lo cometiste: una llave de cierre que falta se suele señalar muy por debajo de la línea realmente errónea.
¿Formatear cambia mis datos?
Casi nunca, pero ese "casi" esconde dos casos. Las claves que parecen números se reordenan, y los enteros más allá de 2^53−1 pierden precisión: ambos explicados arriba. Todo lo demás vuelve idéntico en significado, aunque los espacios difieran.
¿Puedo usar comentarios en un archivo de configuración JSON?
En JSON propiamente dicho, no. Si tu herramienta los acepta, está leyendo JSONC o JSON5, o los elimina antes de analizar. Muchos editores te dejan escribirlos sin problema y luego un analizador estricto más abajo rechaza el archivo, lo que resulta un fallo confuso de depurar. Si necesitas anotar un documento JSON y no puedes cambiar de formato, el apaño convencional es una clave hermana como "_comment".
¿Qué pasa con las claves duplicadas?
La especificación dice que los nombres "deberían" ser únicos pero no prohíbe las repeticiones, así que el comportamiento depende del analizador. En la práctica, JavaScript se queda con la última aparición y descarta las anteriores sin ningún aviso. Si un documento tiene duplicados, formatearlo aquí los colapsará en uno solo: es un cambio que quizá no quieras, así que compruébalo antes de pegar el resultado de vuelta.