cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu
đŸ˜€ Ce billet a Ă©tĂ© Ă©ditĂ© le : 2024-05-14

Quelques pistes pour gérer des tableaux à partir d'un flux JSON.


ඏ

Sous Linux, avec un dĂ©rivĂ© de Debian ou d’Ubuntu comme Linux Mint, la commande jq s’installe l’aide :

sudo apt install jq

Imaginons le flux JSON suivant :

[
  {
    "name": "George",
    "id": 12,
    "email": "george@domain.com"
  },
  {
    "name": "Jack",
    "id": 18,
    "email": "jack@domain.com"
  },
  {
    "name": "Joe",
    "id": 19,
    "email": "joe@domain.com"
  }
]

Pour obtenir et tester ce flux, vous pouvez utiliser :

echo '[
  {"name":"George","id":12,"email":"george@domain.com"},
  {"name":"Jack","id":18,"email":"jack@domain.com"},
  {"name":"Joe","id":19,"email":"joe@domain.com"}
]'

ou mieux (puisque cela vĂ©rifie que vous n’avez pas fait d’erreur) :

jq . <<<'[
  {"name":"George","id":12,"email":"george@domain.com"},
  {"name":"Jack","id":18,"email":"jack@domain.com"},
  {"name":"Joe","id":19,"email":"joe@domain.com"}
]'

ඏ

Obtenir un joli tableau avec @tsv :

Syntaxe jq

On utilise la méthode @tsv de jq pour créer le tableau comme suit :

jq -r '["ID","NAME"], ["--","------"], (.[] | [.id, .name]) | @tsv'
  • ["ID","NAME"] – Correspond Ă  la description de l’entĂȘte
  • ["--","------"] – Est une ligne pour sĂ©parer l’entĂȘte du reste du tableau
  • (.[] | [.id, .name]) – Prend le tableau JSON initial et pour chaque entrĂ©e ne garde que les valeurs id et name.

Exemple complet

jq -r '["ID","NAME"], ["--","------"], (.[] | [.id, .name]) | @tsv' \
  <<<'[
    {"name":"George","id":12,"email":"george@domain.com"},
    {"name":"Jack","id":18,"email":"jack@domain.com"},
    {"name":"Joe","id":19,"email":"joe@domain.com"}
  ]'

Résultat :

ID  NAME
--  ------
12  George
18  Jack
19  Joe

Mais l’affichage n’est pas parfait


Syntaxe jq

jq -r '["ID","NAME","MAIL"], ["--","------","---"], (.[] | [.id, .name, .email]) | @tsv'

Exemple complet

jq -r '["ID","NAME","MAIL"], ["--","------","---"], (.[] | [.id, .name, .email]) | @tsv' \
  <<<'[
    {"name":"George avec un nom trĂšs long","id":12,"email":"george@domain.com"},
    {"name":"Jack","id":18,"email":"jack@domain.com"},
    {"name":"Joe","id":19,"email":"joe@domain.com"}
  ]'

Résultat :

ID  NAME    MAIL
--  ------  ---
12  George avec un nom trĂšs long    george@domain.com
18  Jack    jack@domain.com
19  Joe joe@domain.com

Il y a deux problÚmes majeurs :

  • d’une part, il faut gĂ©rer la ligne dessous l’entĂȘte Ă  la main,
  • d’autre part les colonnes ne sont pas alignĂ©es.

ඏ

Production automatique des tirets

La magie de la commande jq : length*"-"

Pour automatiser la création des lignes avec un tiret :

Syntaxe jq

jq -r '(["ID","NAME","MAIL"] | (., map(length*"-"))), (.[] | [.id, .name, .email]) | @tsv'

Exemple complet

jq -r '(["ID","NAME","MAIL"] | (., map(length*"-"))), (.[] | [.id, .name, .email]) | @tsv' \
  <<<'[
  {"name":"George avec un nom trĂšs long","id":12,"email":"george@domain.com"},
  {"name":"Jack","id":18,"email":"jack@domain.com"},
  {"name":"Joe","id":19,"email":"joe@domain.com"}
]'

Résultat :

ID   NAME    MAIL
--  ----    ----
12  George avec un nom trĂšs long    george@domain.com
18  Jack    jack@domain.com
19  Joe joe@domain.com

ඏ

Utilisation de column

Syntaxe jq et column

jq -r '(["ID","NAME","MAIL"] | (., map(length*"-"))), (.[] | [.id, .name, .email]) | @tsv' | column -ts $'\t'

Exemple complet

jq -r '(["ID","NAME","MAIL"] | (., map(length*"-"))), (.[] | [.id, .name, .email]) | @tsv' \
  <<<'[
    {"name":"George avec un nom trĂšs long","id":12,"email":"george@domain.com"},
    {"name":"Jack","id":18,"email":"jack@domain.com"},
    {"name":"Joe","id":19,"email":"joe@domain.com"}
  ]' |
  column -ts $'\t'

Résultat :

ID  NAME                          MAIL
--  ----                          ----
12  George avec un nom trĂšs long  george@domain.com
18  Jack                          jack@domain.com
19  Joe                           joe@domain.com

ඏ

Références

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog