Tutorial de jq

Tú
Dame un tutorial sobre jq
18/3/2026, 6:30:38 p.m.
Asistente
🤔 Pensamiento: We need to provide a tutorial on jq, a command-line JSON processor. The user asked "Dame un tutorial sobre jq" which means "Give me a tutorial on jq" in Spanish. So we need to respond in Spanish with a tutorial about jq. We should structure it: introduction, installation, basic usage, filters, selecting data, transforming data, working with arrays, pipes, functions, examples, and conclusion. Make it comprehensive but concise enough for a tutorial. We'll write in Spanish, clear and educational. Use code blocks for commands and examples. Let's start.

Claro, aquí tienes un tutorial completo sobre jq, la herramienta de línea de comandos para procesar JSON.


Tutorial de jq: Procesa JSON como un profesional

jq es como sed o awk para JSON: te permite filtrar, transformar y extraer datos de estructuras JSON de forma sencilla desde la terminal.

Instalación

Linux

# Debian/Ubuntu
sudo apt install jq

# Fedora
sudo dnf install jq

# Arch
sudo pacman -S jq

macOS

brew install jq

Windows

Descarga el ejecutable desde stedolan.github.io/jq/download o usa choco install jq.

Conceptos básicos

jq recibe un JSON por entrada estándar y aplica un filtro para producir una salida.

Ejemplo mínimo

echo '{"nombre": "Juan", "edad": 30}' | jq '.nombre'

Salida: "Juan"

El filtro .nombre extrae el valor de la clave "nombre".

Filtros esenciales

Acceder a propiedades

  • .clave → obtiene el valor de una clave.
  • .clave1.clave2 → acceso anidado.
  • .["clave con espacios"] → si la clave tiene caracteres especiales.
echo '{"usuario": {"nombre": "Ana", "edad": 25}}' | jq '.usuario.nombre'
# "Ana"

Trabajar con arrays

  • .[] → itera sobre los elementos del array.
  • .[indice] → accede a un elemento por índice (0-based).
  • .[inicio:fin] → slicing.
echo '["manzana", "pera", "uva"]' | jq '.[1]'
# "pera"

echo '["manzana", "pera", "uva"]' | jq '.[]'
# "manzana"
# "pera"
# "uva"

echo '["manzana", "pera", "uva"]' | jq '.[0:2]'
# ["manzana", "pera"]

Combinar filtros

Puedes encadenar filtros con el operador |.

echo '{"lista": [1,2,3]}' | jq '.lista | .[1]'
# 2

Transformaciones comunes

Seleccionar múltiples claves (objeto nuevo)

echo '{"nombre": "Luis", "edad": 40, "ciudad": "Madrid"}' | jq '{nombre, ciudad}'
# {
#   "nombre": "Luis",
#   "ciudad": "Madrid"
# }

Crear arrays con valores

echo '{"nombre": "Luis", "edad": 40}' | jq '[.nombre, .edad]'
# ["Luis", 40]

Mapear arrays (map)

echo '[1,2,3]' | jq 'map(. * 2)'
# [2,4,6]

Filtrar elementos de un array (select)

echo '[{"id":1,"activo":true}, {"id":2,"activo":false}]' | jq '.[] | select(.activo == true) | .id'
# 1

También puedes usar select con condiciones: > < >= <= == != y combinarlas con and / or.

Eliminar nulos

echo '[1, null, 2, null, 3]' | jq 'map(select(. != null))'
# [1,2,3]

Funciones útiles

  • length → longitud de string, array u objeto.
  • keys → lista las claves de un objeto.
  • has("clave") → comprueba si existe una clave.
  • add → suma elementos de un array numérico.
  • join(";") → une array de strings con separador.
echo '{"a":1, "b":2}' | jq 'keys'
# ["a","b"]

Entrada/salida

Leer de un archivo

jq '.usuarios' datos.json

Salida compacta vs formateada

Por defecto jq formatea la salida. Para compacta (una línea) usa -c:

jq -c '.usuarios' datos.json

Colorear salida (por defecto si es terminal)

Para forzar color: jq -C, para desactivar: jq -M.

Ejemplos prácticos

1. Extraer todos los nombres de usuarios de un array

echo '[{"nombre":"Ana"}, {"nombre":"Luis"}]' | jq '.[].nombre'
# "Ana"
# "Luis"

2. Contar elementos de un array

echo '[1,2,3]' | jq 'length'
# 3

3. Obtener valores únicos

echo '[1,2,2,3,3,3]' | jq 'unique'
# [1,2,3]

4. Transformar objetos (renombrar clave)

echo '{"old": 123}' | jq '{new: .old}'
# {"new": 123}

5. Crear tabla desde JSON (CSV)

echo '[{"nombre":"Ana","edad":30},{"nombre":"Luis","edad":25}]' | jq -r '.[] | [.nombre, .edad] | @csv'
# "Ana",30
# "Luis",25

La opción -r da salida raw (sin comillas adicionales). @csv formatea como CSV.

6. Combinar múltiples archivos JSON

jq -s '.[0] * .[1]' archivo1.json archivo2.json

-s (slurp) lee todos los archivos y los mete en un array.

Trucos avanzados

Variables

Puedes usar --arg para pasar variables del shell:

nombre="Pedro"
echo '{"nombre": "Pedro", "edad":20}' | jq --arg n "$nombre" 'select(.nombre == $n)'
# Devuelve el objeto completo si coincide

Reducir (reduce)

Para cálculos complejos, como sumar valores agrupados.

Conclusión

jq es una navaja suiza para JSON. Con estos filtros básicos ya puedes resolver la mayoría de necesidades: consultar, filtrar, transformar y exportar datos. Practica con tus propios JSON y consulta siempre la ayuda (man jq o jq --help).

¿Tienes algún caso concreto que quieras resolver? ¡Pregunta sin problema!

18/3/2026, 6:30:38 p.m.