Formatear JSON
Un JSON minificado o con sangría inconsistente es ilegible en una revisión de código e inestable en control de versiones, porque dos objetos idénticos en significado pueden generar diffs completamente distintos. Esta API para formatear JSON reescribe cualquier payload con sangría uniforme y, opcionalmente, orden de claves determinista, para que los mismos datos siempre se vean igual.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Por qué el JSON sin formato causa problemas reales
Un archivo JSON guardado por una herramienta, editado por un script y luego versionado por una tercera persona tiende a acumular espaciado inconsistente, mezcla de tabulaciones y espacios, y claves en el orden que el último serializador decidió usar. Nada de eso rompe el análisis del archivo, pero arruina la revisión de código: un cambio de una línea puede mostrarse como un diff de cientos de líneas porque una clave cambió de posición o todo el objeto se volvió a indentar. Los equipos que guardan configuración, fixtures o capturas de API como JSON sufren esto constantemente.
Qué hace exactamente el endpoint
Llama a POST /data/json-format con un cuerpo JSON y recibe un task_id de inmediato, ya que el formateo corre como una tarea asíncrona. El servicio analiza el payload, lo vuelve a serializar con una sangría consistente y configurable y, cuando lo solicita, ordena las claves de cada objeto alfabéticamente en todos los niveles de anidamiento, de modo que la salida sea idéntica byte a byte cada vez que entran los mismos datos lógicos. Los arreglos conservan su orden original, porque ahí el orden suele tener significado, y solo las claves de los objetos quedan sujetas al ordenamiento estable.
El orden estable y por qué importa
La especificación de JSON nunca exigió un orden de claves, lo cual es técnicamente correcto pero incómodo en la práctica: dos librerías pueden serializar el mismo objeto exacto con las claves en una secuencia distinta, y un diff de texto ingenuo marcará eso como un cambio aunque nada relevante se haya movido. El orden estable de claves elimina esa ambigüedad por completo, convirtiendo al JSON en un artefacto normalizado y comparable en lugar de una bolsa de propiedades sin orden que luce distinta en cada corrida.
Dónde encaja en una tubería automatizada
Coloque este paso donde el JSON cruce una frontera que finalmente leerá una persona: antes de subir configuración generada a un repositorio, antes de guardar fixtures de respuestas de API para pruebas, o justo antes de escribir un payload en un log o una bitácora de auditoría. Combina bien con el minificador para la necesidad opuesta — formatear para humanos durante el desarrollo y volver a minificar antes de enviar a producción — usando los mismos datos con dos presentaciones distintas.
Entrega, precio y estado
El JSON formateado se entrega por un webhook firmado, recomendado para tuberías automatizadas, o un enlace firmado válido durante 24 horas; el origen y la salida se eliminan tras la ventana de retención y nunca se usan para entrenar modelos. El precio es un fijo de $0.002 por solicitud sin importar el tamaño del payload, y una tarea fallida — por ejemplo, un JSON inválido que no se puede analizar — nunca se cobra tras los tres reintentos estándar. Este endpoint está activo ahora.
Qué puede hacer con ella
Diffs limpios en configuración generada
Pase la configuración JSON autogenerada por el formateador con orden de claves estable antes de subirla, para que los pull requests muestren solo las líneas que realmente cambiaron.
Normalizar fixtures de API para pruebas
Formatee respuestas de API capturadas de forma consistente para que los fixtures de prueba sigan siendo comparables entre grabaciones tomadas con distintas librerías o versiones de SDK.
Preparar payloads para revisión humana
Formatee un payload compacto de webhook antes de mostrarlo en un panel interno o un ticket de soporte, convirtiendo una línea densa en algo que un compañero realmente pueda leer.
Estandarizar snapshots de datos exportados
Formatee exportaciones JSON nocturnas con la misma sangría y orden de claves cada vez, facilitando detectar qué cambió realmente entre dos fechas.
Preguntas frecuentes
¿Cómo formateo un JSON con una API?
Envíe su cuerpo JSON a POST /data/json-format, que devuelve un task_id de inmediato; el resultado formateado llega a su webhook firmado o a un enlace firmado cuando termina la tarea.
¿La API para formatear JSON es gratis?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Qué significa el orden de claves estable aquí?
Las claves de los objetos se ordenan alfabéticamente en cada nivel de anidamiento para que los mismos datos lógicos siempre produzcan una salida idéntica byte a byte, lo cual mantiene los diffs de control de versiones con sentido. El orden de los elementos en arreglos se conserva tal cual.
¿El formateo cambia mis datos o tipos?
No. Solo cambian los espacios, la sangría y, opcionalmente, el orden de claves; los valores de texto, número, booleano y nulo se conservan exactamente como se analizaron.
¿Puedo formatear archivos JSON muy grandes?
Sí, dentro de los límites de tamaño publicados para el endpoint; como el precio es una tarifa fija por solicitud, el costo se mantiene predecible sin importar qué tan grande sea un payload válido.
¿Qué pasa si la entrada no es JSON válido?
La tarea falla con un error de análisis claro tras los tres reintentos estándar, y no se le cobra por ella.
¿Puedo formatear JSON por lotes?
Sí. Cada solicitud es una tarea asíncrona independiente, así que puede enviar lotes grandes en paralelo y recoger cada resultado por webhook a medida que termina.
¿En qué se diferencia del minificador de JSON?
El formateador expande el JSON para que sea legible con sangría y orden de claves estable; el minificador hace lo contrario, quita espacios para lograr el payload más pequeño posible.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/data/json-format \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/data/json-format", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/json-format",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/json-format", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/json-format", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"input": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.json_format",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |