jq

jq es una herramienta que permite manipular el JSON en la terminal.

Usaremos el siguiente JSON de ejemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
  "name":"Foo Bar Baz",
  "score": 4,
  "color":"red",
  "options":[
    "red",
    "green",
    "blue"
  ],
  "items": [
    {"id": 0},
    {"id": 1, "label": "foo"},
    {"id": 2, "label": "bar"}
  ]
}

Recuperar

Imprimir un campo llamado name:

1
2
$ cat demo.json | jq -r '.name'
Foo Bar Baz

Imprimir todos los campos llamados label dentro una lista:

1
2
3
4
$ cat demo.json | jq -r '.items[].label'
null
foo
bar

Filtra

Ejemplos de como filtrar que el campo score sea igual al valor 4:

1
$ cat demo.json | jq -r 'select(.score == 4)'

Transformar

CSV

Lista las columnas name y label y convierte la salida en csv.

1
2
$ cat demo.json | jq -r '[.name, .score] | @csv'
"Foo Bar Baz",4

Minify

Es una técnica para hacerlo más compacto quitando de la estructura espacios, tabs, nuevas líneas sin modificar los datos:

1
2
$ cat demo.json | jq -r tostring
{"name":"Foo Bar Baz","score":4,"color":"red","options":["red","green","blue"],"items":[{"id":0},{"id":1,"label":"foo"},{"id":2,"label":"bar"}]}