Clase 00 — Introducción a JSON
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos. Es fácil de leer para humanos y fácil de parsear para máquinas.
¿Dónde se usa JSON?
| Contexto | Uso |
|---|---|
| APIs REST | Formato estándar de request/response |
| Configuraciones | package.json, tsconfig.json, .eslintrc.json |
| Terraform | terraform.tfstate, outputs |
| AWS CLI | Salida por defecto, políticas IAM |
| Docker | docker inspect, manifiestos |
| Kubernetes | Alternativa a YAML (kubectl get -o json) |
| Bases de datos | MongoDB, PostgreSQL (jsonb), DynamoDB |
| CI/CD | Artefactos, matrices en GitHub Actions |
JSON vs YAML vs XML
// JSON
{
"nombre": "RoxsRoss",
"rol": "DevOps Engineer",
"habilidades": ["Docker", "Kubernetes", "Terraform"]
}
# YAML
nombre: RoxsRoss
rol: DevOps Engineer
habilidades:
- Docker
- Kubernetes
- Terraform
| Característica | JSON | YAML | XML |
|---|---|---|---|
| Legibilidad | Media | Alta | Baja |
| Verbosidad | Media | Baja | Alta |
| Comentarios | ❌ No | ✅ Sí | ✅ Sí |
| Soporte nativo en JS | ✅ Sí | ❌ No | ❌ No |
| APIs REST | ⭐ Estándar | Raro | Legacy |
Reglas básicas de JSON
1. Todo es pares clave-valor dentro de llaves {}
{
"clave": "valor"
}
2. Las claves SIEMPRE van entre comillas dobles
{
"nombre": "correcto"
}
3. Valores válidos
- String:
"texto" - Number:
42,3.14,-5,1.5e+3 - Boolean:
true,false - Null:
null - Object:
{ } - Array:
[ ]
4. No se permiten comentarios
// ❌ Esto NO es JSON válido
{
"nombre": "valor" // Esto tampoco
}
Nota: VS Code soporta
.jsonc(JSON with Comments) para archivos comosettings.jsonytsconfig.json.
5. No se permite coma trailing
// ❌ INCORRECTO
{
"nombre": "valor",
"edad": 30,
}
// ✅ CORRECTO
{
"nombre": "valor",
"edad": 30
}
Tu primer archivo JSON
{
"nombre": "RoxsRoss",
"edad": 30,
"rol": "DevOps Engineer",
"activo": true,
"empresa": null,
"habilidades": ["Docker", "Kubernetes", "Terraform", "Bash", "Python"],
"redes": {
"github": "roxsross",
"twitter": "@roxsross",
"linkedin": "roxsross"
}
}
Validar JSON
# Con jq (instalar: brew install jq / apt install jq)
jq . mi-perfil.json
jq empty mi-perfil.json && echo "✅ Válido" || echo "❌ Inválido"
# Con Python (viene preinstalado)
python3 -m json.tool mi-perfil.json
# Formatear (pretty print)
echo '{"nombre":"RoxsRoss","edad":30}' | jq .
# Minificar (una línea)
echo '{"nombre":"RoxsRoss","edad":30}' | jq -c .
Ejemplo: JSON en la vida real
package.json (Node.js)
{
"name": "mi-api",
"version": "1.0.0",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest"
},
"dependencies": {
"express": "^4.18.2",
"cors": "^2.8.5"
}
}
Respuesta de una API REST
{
"status": 200,
"message": "success",
"data": {
"id": 25,
"name": "pikachu",
"types": ["electric"],
"stats": {
"hp": 35,
"attack": 55,
"defense": 40,
"speed": 90
}
}
}