jq es un procesador de JSON de la terminal. Tiene bastantes utilidades para procesar JSON desde la shell, transformarlos, buscar información, etc.
Mostrar todo el Json
$ curl https://dummyjson.com/quotes | jq '.'
# Pipe con less y conservar el color
$ curl https://dummyjson.com/quotes | jq -C '.' | less -R
Filtros
Los filtros nos permiten imprimir los elementos deseados de un JSON. Por ejemplo, el JSON de que hemos usado de quotes, tiene la siguiente forma:
{
"quotes": [
{
"id": 4,
"quote": "If You Can'T Make It Good, At Least Make It Look Good.",
"author": "Bill Gates"
},
{
"id": 7,
"quote": "If You Are Out To Describe The Truth, Leave Elegance To The Tailor.",
"author": "Albert Einstein"
}
]
}
Por lo tanto para imprimir solos los autores, debemos navegar de una forma similar. Traducido a un filtro de jq:
jq '.quotes | .[] | .author'
$ Bill Gates
$ Albert Einstein
Explicando un poquito el comando tendríamos:
- “.quotes” Imprime el valor de la clave quotes.
- El caracter de “pipe” encadena filtros.
- ”.[]” Imprime todo el contenido del array que cuelga de quotes.
- “.author” Imprime el contenido de las claves “author”.
Para mostrar todos los autores de la API:
$ curl https://dummyjson.com/quotes | jq '.quotes | .[] | .author' | sort | uniq -c
3 "Abdul Kalam"
1 "Abraham Lincoln"
3 "Abu Bakr (R.A)"
2 "Albert Einstein"
2 "Ali ibn Abi Talib (R.A)"
1 "Aristotle"
1 "Bill Gates"
2 "Mother Teresa"
3 "Muhammad Ali"
1 "Nelson Mandela"
1 "Oprah Winfrey"
7 "Rumi"
1 "Umar ibn Al-Khattāb (R.A)"
1 "Walt Disney"
Select
Tambien podemos hacer búsquedas en un JSON y devolver el objeto que estamos buscando si conocemos una de sus claves.
Por ejemplo, dado el JSON de la quotes, queremos obtener todos los objetos cuyo autor sea “Albert Einstein”
$ curl https://dummyjson.com/quotes | jq '.quotes | .[] | select(.author == "Albert Einstein")'
{
"id": 7,
"quote": "If You Are Out To Describe The Truth, Leave Elegance To The Tailor.",
"author": "Albert Einstein"
}
{
"id": 28,
"quote": "Technological Progress Is Like An Axe In The Hands Of A Pathological Criminal.",
"author": "Albert Einstein"
}
Mostrar las claves
Otra utilidad excelente que posee es la de mostrar las claves de un json. Las claves se ordenan por orden alfabético.
$ curl https://dummyjson.com/quotes | jq 'keys'
[
"limit",
"quotes",
"skip",
"total"
]
Seleccionar múltiples elementos
También podemos seleccionar múltiples elementos de un json usando {}
.
Por ejemplo, para seleccionar solo los autores y sus frases:
curl https://dummyjson.com/quotes | jq '.quotes | .[] | {author, quote}'
Para más información visitar: https://jqlang.github.io/jq/manual/#basic-filters