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:

  1. “.quotes” Imprime el valor de la clave quotes.
  2. El caracter de “pipe” encadena filtros.
  3. ”.[]” Imprime todo el contenido del array que cuelga de quotes.
  4. “.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