¿Qué es JSON?
JSON (JavaScript Object Notation) es un formato de intercambio de datos ligero, legible por humanos y máquinas. Estandarizado en RFC 8259 (2017), es el formato de facto para APIs web, archivos de configuración y almacenamiento de datos semiestructurados.
Tipos de datos en JSON
{
"texto": "Hola mundo",
"numero_entero": 42,
"numero_decimal": 3.14159,
"booleano": true,
"nulo": null,
"array": [1, 2, 3, "cuatro"],
"objeto_anidado": {
"nombre": "Juan",
"edad": 30
},
"array_de_objetos": [
{"id": 1, "precio": 1.20},
{"id": 2, "precio": 0.80}
]
}
Reglas esenciales: claves entre comillas dobles, sin comentarios, sin comas finales.
JSON vs XML vs YAML
| Característica | JSON | XML | YAML |
|---|---|---|---|
| Legibilidad | Buena | Regular | Excelente |
| Verbosidad | Baja | Alta | Muy baja |
| Comentarios | ❌ | ✅ | ✅ |
| Esquemas | JSON Schema | XSD | ❌ |
| APIs REST | ✅ Estándar | Legacy | Raro |
Trabajar con JSON en Python
import json
# Parsear JSON
datos = json.loads('{"nombre": "Ana", "edad": 28}')
print(datos["nombre"])
# Serializar a JSON
persona = {"nombre": "Carlos", "hobbies": ["fútbol", "lectura"]}
json_str = json.dumps(persona, ensure_ascii=False, indent=2)
# Leer y escribir archivos
with open("datos.json", "r", encoding="utf-8") as f:
datos = json.load(f)
with open("salida.json", "w", encoding="utf-8") as f:
json.dump(persona, f, ensure_ascii=False, indent=2)
# Minificar
minificado = json.dumps(persona, separators=(",", ":"))
Trabajar con JSON en JavaScript
const datos = JSON.parse('{"nombre":"Ana","edad":28}');
const jsonStr = JSON.stringify({ nombre: "Carlos" }, null, 2);
async function fetchDatos(url) {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query: "usuarios activos" })
});
return response.json();
}
Validación con JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["nombre", "email"],
"properties": {
"nombre": {"type": "string", "minLength": 2},
"email": {"type": "string", "format": "email"},
"rol": {"type": "string", "enum": ["admin", "usuario"]}
}
}
import jsonschema
schema = {"type": "object", "required": ["nombre"],
"properties": {"nombre": {"type": "string"}}}
try:
jsonschema.validate({"nombre": "Ana"}, schema)
print("JSON válido")
except jsonschema.ValidationError as e:
print(f"Error: {e.message}")
Herramientas CLI (jq)
sudo apt install jq
cat datos.json | jq . # Prettify
cat datos.json | jq '.nombre' # Extraer campo
cat usuarios.json | jq '.[] | select(.activo == true)' # Filtrar
cat datos.json | jq 'length' # Contar
cat datos.json | jq -c . # Minificar
Convertir JSON a CSV
import json, csv
with open("usuarios.json") as f:
data = json.load(f)
with open("usuarios.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
Conclusión
JSON es el formato de intercambio de datos dominante para APIs web, configuraciones y datos semi-estructurados. Su simplicidad y soporte universal en todos los lenguajes lo hacen insustituible en desarrollo web moderno.
Conversiones relacionadas
Conversiones de documento que siguen este tema: