Traitement json dans le terminal avec jq

jq est construit autour du concept de filtres qui travaillent sur un flux de json. Chaque filtre prend une entrée et émet du json en sortie standard. Comme nous allons le voir, il existe de nombreux filtres prédéfinis que nous pouvons utiliser. Et nous pouvons combiner ces filtres sans effort en utilisant des tuyaux pour construire et appliquer rapidement des opérations et des transformations complexes à nos données json.

JSON

Installation

sudo apt install jq

Usages

Prettify json output

Dans cet exemple nous avons un tableau contenant un string (status) et une collection (posts).

curl https://mediashare.fr/api/posts | jq
{
  "status": "success",
  "posts": [
    {
      "id": "61a85e2b216f1",
      "title": "Symfony 6.0 - features",
      "slug": "symfony-6-0-features",
      "createDate": "2021-12-02T06:48:27+01:00",
      "updateDate": "2021-12-03T18:21:55+01:00",
      "views": 31,
      "comments": 0,
      "author": {
        "id": "609cd61be40a6",
        "username": "MarquandT",
        "signature": "Ethical Hacker ~ Web Developper ~ File Hosting Provider ~ Crypto Enthusiast ~ Automation Expert\r\nBitcoin donation: 32Uu4NKGnxSPC7UukYXVyRHwbppbQpKVki"
      }
    },
    ...

Récupérer une valeur

Pour accèder à une valeur nous devons pointer la clef avec . puis le nom de la clef .status, par exemple si nous souhaitons connaitre la valeur de status.

curl https://mediashare.fr/api/posts | jq '.status'

Naviguer dans un tableau

Utiliser l'index

Nous pouvons récupérer la valeur d'un ou plusieurs tableaux en fonction de son/leurs index.

curl https://mediashare.fr/api/posts | jq '.posts[0]'
curl https://mediashare.fr/api/posts | jq '.posts[1,2]'
curl https://mediashare.fr/api/posts | jq '.posts[0:10]'
Récupérer la valeur d'un élément
curl https://mediashare.fr/api/posts | jq '.posts[].id'
curl https://mediashare.fr/api/posts | jq '.posts[].author'
curl https://mediashare.fr/api/posts | jq '.posts[].author.username'
Créer un objet à partir d'un array

À partir du tableau posts nous allons créer des objets contenant l'id, title et les views de chaques articles avec l'opérateur |.

curl https://mediashare.fr/api/posts | jq '.posts[]|{"id": .id, "title": .title, "views": .views}'
{
  "id": "61a85e2b216f1",
  "title": "Symfony 6.0 - features",
  "views": 32
}
...

Si nous le souhaitons, nous pouvons ensuite classer les résultats par le nombre de vues (views) par article.

curl https://mediashare.fr/api/posts | jq '[.posts[]|{"id": .id, "title": .title, "views": .views}] | sort_by(.views)'

MarquandT

Ethical Hacker ~ Web Developper ~ File Hosting Provider ~ Crypto Enthusiast ~ Automation Expert Bitcoin donation: 32Uu4NKGnxSPC7UukYXVyRHwbppbQpKVki

5570