Cómo transformar JSON con jq: guía interactiva
(navendu.me)jqes una herramienta de línea de comandos para trabajar con datos JSON y viene instalada por defecto en la mayoría de las distribuciones de Linux- Es útil para mostrar datos JSON con formato legible (pretty print) o transformarlos usando filtros
- Es tan potente que suele incluirse entre las 5 herramientas CLI que todo desarrollador debería aprender, y permite realizar de forma sencilla muchas tareas distintas con datos JSON
Instalación de jq y uso básico
-
Cómo instalarlo
jqpuede instalarse desde la mayoría de los gestores de paquetes, o bien descargando el binario directamente o compilándolo desde el código fuente- Después de instalarlo, puedes verificar que funciona usando el comando
jq
-
Ejemplo básico de uso
- Mostrar datos JSON con formato legible:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- Mostrar datos JSON con formato legible:
-
Ejemplo de filtro JSON
- Filtrar datos que cumplan una condición específica:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- Filtrar datos que cumplan una condición específica:
Funciones principales de jq
Filtros básicos
-
Filtro Identity
- Muestra los datos de entrada sin cambios:
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- Muestra los datos de entrada sin cambios:
-
Acceso a campos específicos
- Seleccionar un campo específico de un objeto JSON:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name' - Acceder a un campo anidado:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- Seleccionar un campo específico de un objeto JSON:
Manejo de arreglos
-
Acceso a elementos de un arreglo
- Seleccionar el elemento en un índice específico de un arreglo JSON:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- Seleccionar el elemento en un índice específico de un arreglo JSON:
-
Segmentación de arreglos
- Extraer un subarreglo de un rango específico:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- Extraer un subarreglo de un rango específico:
-
Iteración sobre arreglos
- Aplicar un filtro a cada elemento del arreglo:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- Aplicar un filtro a cada elemento del arreglo:
Creación de nuevo JSON
-
Crear un nuevo objeto
- Crear un nuevo objeto JSON con los campos seleccionados:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- Crear un nuevo objeto JSON con los campos seleccionados:
-
Crear un nuevo arreglo
- Crear un arreglo con los datos transformados:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- Crear un arreglo con los datos transformados:
Funciones avanzadas de jq
Uso de funciones
-
Calcular longitud
- Calcular la longitud de una cadena:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- Calcular la longitud de una cadena:
-
Extraer claves
- Devolver las claves de un objeto como arreglo:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- Devolver las claves de un objeto como arreglo:
-
Función map
- Aplicar un filtro a cada elemento del arreglo:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- Aplicar un filtro a cada elemento del arreglo:
Selección de datos
- Seleccionar datos que cumplan una condición
- Filtrar datos que satisfacen una condición específica:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- Filtrar datos que satisfacen una condición específica:
Transformación y uso de JSON
-
Transformación avanzada de JSON
- Filtros para agrupar datos o calcular estadísticas:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- Filtros para agrupar datos o calcular estadísticas:
-
Procesamiento de JSON a gran escala
- Procesar grandes volúmenes de datos JSON de forma eficiente:
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- Procesar grandes volúmenes de datos JSON de forma eficiente:
-
Puedes practicar en jq Playground
3 comentarios
¡Gracias por el resumen! De verdad es información buenísima.
> Es tan potente que incluso está incluido entre las 5 herramientas CLI que todo desarrollador debería aprender,
Pero también me da curiosidad cuáles son las otras 4 herramientas CLI; como no las mencionan en el artículo, terminó convirtiéndose en un macguffin..
https://navendu.me/posts/jq-interactive-guide/….
Al ver el original,
> jq is on every “five command line tools to learn as a developer” video on YouTube.
aparece esa frase.
Los otros 4 no están especificados; parece que siempre lo mencionan en ese tipo de videos de recomendaciones de herramientas CLI, jaja.