Datos modernos: JSON/YAML + APIs
La mayoría de los servicios y aplicaciones modernas comunican datos en formatos JSON o YAML. Con Bash y unas pocas herramientas podemos consumir y procesar esa información de forma sencilla.
1. Herramientas necesarias #
| Herramienta | Uso principal |
|---|---|
curl | Consultar APIs o descargar datos por HTTP/HTTPS |
jq | Procesar y filtrar JSON |
yq | Procesar YAML/TOML/JSON |
👉 Instala en Linux:
1sudo apt update 2sudo apt install curl jq 3sudo snap install yq
En macOS con Homebrew:
1brew install curl jq yq
2. curl: consultar APIs #
curl permite obtener datos de una API REST.
Ejemplo: consultar la API pública de Pokémon
1curl -s https://pokeapi.co/api/v2/pokemon/pikachu
-s→ modo silencioso (no muestra barra de progreso)- Muestra un objeto JSON en la salida estándar.
3. jq: procesar JSON #
jq es el estándar de facto para trabajar con JSON en scripts.
Obtener un campo #
1curl -s https://pokeapi.co/api/v2/pokemon/pikachu | jq '.name'
Salida:
"pikachu"
Obtener un campo dentro de un objeto #
1curl -s https://pokeapi.co/api/v2/pokemon/pikachu | jq '.abilities[0].ability.name'
Salida:
"static"
Filtrar y mostrar varios campos #
1curl -s https://pokeapi.co/api/v2/pokemon/pikachu | jq '{nombre: .name, peso: .weight}'
Salida:
1{ 2 "nombre": "pikachu", 3 "peso": 60 4}
Iterar sobre un array #
1curl -s https://pokeapi.co/api/v2/pokemon/pikachu | jq '.abilities[].ability.name'
Salida:
static
lightning-rod
Convertir JSON a texto plano #
1curl -s https://pokeapi.co/api/v2/pokemon/pikachu | jq -r '.name'
Salida:
pikachu
👉 La opción -r (raw output) elimina las comillas.
4. Autenticación con curl #
Muchas APIs requieren token de acceso.
Ejemplo con cabecera Authorization:
1curl -s -H "Authorization: Bearer $TOKEN" https://api.example.com/data
5. Enviar datos (POST) con JSON #
1curl -s -X POST -H "Content-Type: application/json" \ 2 -d '{"nombre":"Angel","edad":30}' \ 3 https://api.example.com/users
6. yq: procesar YAML/TOML #
Muchos archivos de configuración (Kubernetes, Ansible, etc.) usan YAML.
Ejemplo: archivo config.yaml
1app: 2 name: demo 3 version: 1.2 4db: 5 host: localhost 6 port: 5432
Obtener el nombre de la app:
1yq '.app.name' config.yaml
Salida:
demo
Convertir YAML a JSON:
1yq -o=json '.' config.yaml
Modificar un valor:
1yq -i '.db.port = 3306' config.yaml
7. Ejemplo integrador: consultar API y guardar datos #
Crea un script pokemon_info.sh que:
-
Reciba el nombre de un Pokémon como argumento.
-
Use
curlpara consultar la API. -
Obtenga con
jq:- Su nombre
- Su peso
- Sus habilidades
-
Guarde el resultado en
pokemon.json.
Ejemplo de ejecución:
1./pokemon_info.sh pikachu
Salida en terminal:
Nombre: pikachu
Peso: 60
Habilidades:
- static
- lightning-rod
Datos guardados en pokemon.json
8. Ejercicio práctico 1 #
Crea un script clima.sh que:
- Pida el nombre de una ciudad al usuario.
- Use la API gratuita de wttr.in para obtener la temperatura actual:
1curl -s "https://wttr.in/$CIUDAD?format=3"
- Muestre la temperatura en pantalla.
Ejemplo:
Introduce ciudad: Madrid
Madrid: 🌤️ +28°C
9. Ejercicio práctico 2 #
Tienes un archivo config.yaml con:
1usuarios: 2 - nombre: Ana 3 rol: admin 4 - nombre: Luis 5 rol: editor 6 - nombre: Maria 7 rol: viewer
Crea un script lista_admins.sh que use yq para listar solo los usuarios con rol admin.
Salida esperada:
Ana
10. Buenas prácticas #
- ✅ Usa
-sencurlpara scripts (modo silencioso). - ✅ Valida las respuestas de la API antes de procesarlas.
- ✅ Usa
jq -rpara obtener valores sin comillas. - ✅ No guardes tokens sensibles en el script: usa variables de entorno.
- ✅ Para archivos de configuración, YAML es preferible y
yqlo hace fácil de manipular.
Resumen del tema
Conceptos clave #
- Consumo HTTP/REST con
curl: peticiones silenciosas (-s), envío de cabeceras (-H "Authorization: Bearer $TOKEN"), métodos HTTP (-X POST) y payloads JSON (-d '{"key":"val"}'). - Manipulación de JSON con
jq: selección de propiedades (.campo), filtrado en arrays (.items[].id), construcción de nuevos objetos ({a: .x, b: .y}) y extracción sin comillas (jq -r). - Gestión de YAML/TOML con
yq: consulta de estructuras complejas (yq '.app.version'), conversión de formatos (yq -o=json) y edición directa en archivo (yq -i). - Seguridad en Integraciones: inyección de credenciales mediante variables de entorno en lugar de cadenas hardcodeadas.
Qué debes recordar #
La combinación de curl -s, jq -r y yq permite interactuar con APIs modernas y procesar formatos JSON/YAML fluidamente desde Bash.