El JSON crudo de una API o un fichero de log suele venir en una sola línea ininterrumpida —— válido, pero imposible de leer de un vistazo. Formatear JSON (también llamado "pretty-print" o "embellecer") añade indentación consistente y saltos de línea para que la estructura sea inmediatamente clara. Esta guía muestra cómo formatear un fichero o cadena JSON en JavaScript, Python, la línea de comandos y directamente en el navegador.
¿Qué significa "formatear JSON"?
Un formateador JSON toma una cadena JSON compacta o con indentación inconsistente y la reescribe con:
- Cada par clave–valor en su propia línea
- Objetos y arrays anidados con un número fijo de espacios (normalmente 2 o 4)
- Sin espacios al final
// Antes de formatear (minificado)
{"user":{"name":"Alice","age":30,"roles":["admin","editor"]}}
// Después de formatear (2 espacios)
{
"user": {
"name": "Alice",
"age": 30,
"roles": [
"admin",
"editor"
]
}
}Ambas formas son semánticamente idénticas —— cualquier parser de JSON produce la misma estructura de datos a partir de cualquiera de ellas. Formatear es puramente para legibilidad humana.
Cómo formatear JSON en JavaScript
JSON.stringify() acepta un segundo argumento (un replacer) y un tercero (el nivel de indentación). Pasa null como replacer y 2 para 2 espacios de indentación (la API completa en Cómo hacer Stringify de JSON):
const obj = { user: { name: "Alice", age: 30, roles: ["admin", "editor"] } };
// Compacto (sin formateo)
JSON.stringify(obj);
// Embellecido con 2 espacios
JSON.stringify(obj, null, 2);
// 4 espacios
JSON.stringify(obj, null, 4);
// Tabulado
JSON.stringify(obj, null, '\t');Formatear una cadena JSON (no un objeto)
Si ya tienes una cadena JSON válida pero mal formateada, parsea primero y vuelve a stringify:
const raw = '{"name":"Alice","age":30}';
const formatted = JSON.stringify(JSON.parse(raw), null, 2);
console.log(formatted);Ordenar claves alfabéticamente
Para ordenar las claves del objeto al formatear, pasa una función replacer que ordene las claves de cada objeto encontrado:
function sortedStringify(obj, indent = 2) {
return JSON.stringify(obj, (key, value) => {
if (value && typeof value === 'object' && !Array.isArray(value)) {
return Object.keys(value).sort().reduce((acc, k) => {
acc[k] = value[k];
return acc;
}, {});
}
return value;
}, indent);
}Cómo formatear JSON en Python
El módulo json integrado de Python maneja el formateo con el parámetro indent:
import json
# Formatear un dict de Python
data = {"user": {"name": "Alice", "age": 30, "roles": ["admin", "editor"]}}
formatted = json.dumps(data, indent=2)
print(formatted)
# Formatear una cadena JSON
raw = '{"name":"Alice","age":30}'
formatted = json.dumps(json.loads(raw), indent=2)
# Ordenar claves
formatted = json.dumps(data, indent=2, sort_keys=True)
# Formatear un fichero JSON
with open('input.json') as f:
data = json.load(f)
with open('output.json', 'w') as f:
json.dump(data, f, indent=2)Cómo formatear un fichero JSON en la línea de comandos
Usando jq (recomendado)
jq es el procesador JSON estándar de la línea de comandos. Formatea JSON por defecto:
# Embellece un fichero JSON
jq . input.json
# Embellece y guarda en otro fichero
jq . input.json > output.json
# Formatea la respuesta de curl
curl -s https://api.example.com/users | jq .
# Ordena las claves
jq --sort-keys . input.jsonUsando Python (sin instalar nada)
El módulo json.tool de Python funciona como formateador de línea de comandos en cualquier sistema con Python:
# Formatea un fichero
python3 -m json.tool input.json
# Desde la entrada estándar
echo '{"name":"Alice","age":30}' | python3 -m json.tool
# Ordena claves
python3 -m json.tool --sort-keys input.jsonUsando Node.js
node -e "const fs=require('fs'); const d=JSON.parse(fs.readFileSync('input.json')); console.log(JSON.stringify(d,null,2))"Cómo convertir datos a formato JSON
"Format to JSON" suele significar serializar datos desde otro formato —— un dict de Python, un fichero CSV, una configuración YAML —— a JSON válido.
De YAML a JSON
# Python
import yaml, json
with open('config.yaml') as f:
data = yaml.safe_load(f)
print(json.dumps(data, indent=2))O usa el conversor YAML a JSON en tu navegador —— sin código. Para cuándo elegir cada formato, ver JSON vs YAML; para el trasfondo de por qué YAML 1.2 es un superconjunto propio de JSON, ver Compatibilidad YAML 1.2 con JSON.
De CSV a JSON
import csv, json
with open('data.csv') as f:
rows = list(csv.DictReader(f))
print(json.dumps(rows, indent=2))Desde un objeto JavaScript
Los objetos JavaScript parecen JSON pero no lo son —— pueden tener claves sin comillas, cadenas con comillas simples, comas finales y comentarios. Pega un literal de objeto JavaScript no válido en JSON Fix para convertirlo automáticamente en JSON válido.
Formatear JSON en el editor (Prettier, VS Code, pre-commit)
Para el día a día, el momento más útil para formatear JSON es al guardar —— así nunca llega sin formatear a git ni a un PR.
Prettier
# instalar
npm i -D prettier
# formatea in-place cada .json (y fuente)
npx prettier --write "**/*.{json,jsonc}"
# solo comprobar (CI-friendly, sale no-cero si algo necesita formato)
npx prettier --check "**/*.json" Prettier soporta JSON y JSONC out of the box. Un .prettierrc de dos líneas como { "tabWidth": 2 } suele bastar.
VS Code —— Format on Save
Instala la extensión Prettier y añade a tu settings.json de workspace:
{
"editor.formatOnSave": true,
"[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
"[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }
}Hook pre-commit
Para impedir que se commitee JSON sin formatear, conecta lint-staged + husky:
// package.json
{
"lint-staged": { "*.{json,jsonc}": "prettier --write" }
}
# instala el hook
npx husky add .husky/pre-commit "npx lint-staged"Ejemplo de formato JSON: antes y después
// Sin formatear —— válido pero ilegible
{"orders":[{"id":1001,"customer":{"name":"Alice"},"items":[{"sku":"A1","qty":2}]}]}
// Formateado
{
"orders": [
{
"id": 1001,
"customer": { "name": "Alice" },
"items": [ { "sku": "A1", "qty": 2 } ]
}
]
}Preguntas frecuentes
¿Cómo formateo JSON en JavaScript?
Usa JSON.stringify(value, null, 2) —— el tercer argumento define la indentación (2 espacios, 4 espacios o '\t' para tabuladores). Para formatear una cadena JSON existente, parsea primero: JSON.stringify(JSON.parse(raw), null, 2).
¿Cómo hago pretty-print de JSON en la línea de comandos?
Usa jq . file.json (formatea por defecto), o python3 -m json.tool file.json si no tienes jq. Añade --sort-keys para ordenar las claves alfabéticamente.
¿Cuál es la diferencia entre formatear y minificar JSON?
Formatear añade espacios para mejorar la lectura; minificar los elimina para reducir tamaño. Son opuestos exactos y ambos preservan los datos. Ver Cómo minificar JSON.
¿Formatear JSON cambia los datos?
No. La indentación y los saltos de línea son espacios sin significado en JSON —— todo parser produce la misma estructura de datos a partir de entrada compacta o embellecida.
Formatea JSON online —— sin instalación
Si necesitas formatear una cadena JSON ahora mismo sin escribir código, JSON Fix formatea tu JSON al instante. Pega el JSON, haz clic en Format y copia el resultado. También repara errores comunes (comas finales, comillas simples, claves sin comillas) antes de formatear, así que funciona aunque tu JSON aún no sea válido.
- JSON Fix —— formatea y repara JSON en un paso
- Cómo minificar JSON —— la operación inversa, y cuándo merece la pena
- Cómo convertir CSV y XML a JSON —— pasa otros formatos a JSON
- Tutorial de jq —— formatea y transforma JSON en la línea de comandos
- JSON Diff —— compara JSON formateado y original lado a lado
- ¿Qué es JSON? —— los seis tipos y las reglas que hacen estricto a JSON
- Ejemplos de formato JSON —— ejemplos copiables para cada tipo y patrón del mundo real
- YAML a JSON —— convierte YAML en JSON formateado