GNU/Linux >> Tutoriels Linux >  >> Linux

Commande JQ sous Linux avec exemples

Présentation

jq est un processeur JSON de ligne de commande léger et flexible.

jq est comme sed pour les données JSON :vous pouvez l'utiliser pour découper, filtrer, cartographier et transformer des données structurées avec la même facilité que sed, awk, grep et ses amis vous permettent de jouer avec du texte.

Également jq écrit en C portable, et il n'a aucune dépendance d'exécution. Vous pouvez télécharger un seul binaire, le scp sur une machine éloignée du même type et vous attendre à ce qu'il fonctionne.

jq peut modifier le format de données que vous avez dans celui que vous voulez avec très peu d'effort, et le programme pour le faire est souvent plus court et plus simple que prévu.

Dans cet article, nous allons apprendre à utiliser la commande JQ pour manipuler et travailler avec des données JSON dans un shell Linux.

Installer la commande JQ

La commande JQ n'est pas disponible dans certaines distributions Linux par défaut; Il doit être téléchargé dans le système avant de pouvoir être utilisé. Vous pouvez télécharger la commande JQ comme n'importe quel autre package sur votre système. Sur Ubuntu, utilisez la commande ci-dessous pour installer l'utilitaire JQ :

qadry@unixcop:~$ sudo apt install jq -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libreoffice-help-common
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  libjq1 libonig5
The following NEW packages will be installed:
  jq libjq1 libonig5
0 upgraded, 3 newly installed, 0 to remove and 240 not upgraded.
Need to get 313 kB of archives.
After this operation, 1062 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 libonig5 amd64 6.9.4-1 [142 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libjq1 amd64 1.6-1ubuntu0.20.04.1 [121 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/universe amd64 jq amd64 1.6-1ubuntu0.20.04.1 [50.2 kB]
Fetched 313 kB in 2s (128 kB/s)
Selecting previously unselected package libonig5:amd64.
(Reading database ... 196337 files and directories currently installed.)
Preparing to unpack .../libonig5_6.9.4-1_amd64.deb ...
Unpacking libonig5:amd64 (6.9.4-1) ...
Selecting previously unselected package libjq1:amd64.
Preparing to unpack .../libjq1_1.6-1ubuntu0.20.04.1_amd64.deb ...
Unpacking libjq1:amd64 (1.6-1ubuntu0.20.04.1) ...
Selecting previously unselected package jq.
Preparing to unpack .../jq_1.6-1ubuntu0.20.04.1_amd64.deb ...
Unpacking jq (1.6-1ubuntu0.20.04.1) ...
Setting up libonig5:amd64 (6.9.4-1) ...
Setting up libjq1:amd64 (1.6-1ubuntu0.20.04.1) ...
Setting up jq (1.6-1ubuntu0.20.04.1) ...
Processing triggers for man-db (2.9.1-1) ...

Processing triggers for libc-bin (2.31-0ubuntu9.2) ...#######################################################################################.........
qadry@unixcop:~$

Et utilisez cette commande ci-dessous si vous exécutez une distribution comme CentOS 8 qui a déjà JQ par défaut, vous obtiendrez une sortie similaire à celle-ci :

sudo dnf install jq 

Syntaxe

Examinons la syntaxe de la commande JQ :

jq [options]  [file...]

jq [options] --args  [strings...]

jq [options] --jsonargs  [JSON_TEXTS...]

Organiser les données JSON à l'aide de la commande JQ

JQ organise et embellit les données JSON lors de leur impression sur la sortie standard.

Donc, dans cet exemple, nous avons un fichier JSON nommé unixcop.json et nous devons sortir les données sur la sortie standard :

qadry@unixcop:~$ cat unixcop.json 
{"product":{"name": "speaker","id": "123"}}
qadry@unixcop:~$ 

Les données imprimées sur la sortie standard à l'aide de la commande cat sont désorganisées et désordonnées. Nous pouvons organiser ces données en utilisant la commande JQ ci-dessous

qadry@unixcop:~$ jq '.' unixcop.json
{
  "product": {
    "name": "speaker",
    "id": "123"
  }
}
qadry@unixcop:~$ 

Désormais, les données sont devenues beaucoup plus organisées et plus faciles à comprendre. Ce filtre est particulièrement nécessaire lors de l'accès aux données à partir des API ; Les données stockées dans les API peuvent être très désorganisées et confuses.

Accéder à une propriété à l'aide de la commande JQ

Le .champ le filtre avec la commande JQ peut_être utilisé pour accéder à la propriété de l'objet dans le shell.

Nous pouvons utiliser le .field opérateur. Par exemple, pour accéder à la propriété du produit, nous pouvons utiliser cette commande :

qadry@unixcop:~$ jq '.product' unixcop.json 
{
  "name": "speaker",
  "id": "123"
}
qadry@unixcop:~$ 

Nous pouvons également accéder aux éléments présents dans la propriété en utilisant le .field opérateur. Pour accéder à l'élément de nom dans la propriété du produit, nous utiliserons :

qadry@unixcop:~$ jq '.product.name' unixcop.json 
"speaker"
qadry@unixcop:~$ 

Accéder à un élément de tableau à l'aide de la commande JQ

Nous pouvons également accéder et afficher les éléments présents dans un tableau dans un fichier JSON en utilisant le .[] opérateur. Pour cet exemple, nous allons modifier notre fichier JSON afin qu'il ressemble à ceci :

qadry@unixcop:~$ cat unixcop.json 
[{"name": "TV","id": "213"},{"name": "speaker","id": "123"},{"name": "keyboard","id": "432"}]

qadry@unixcop:~$ jq '.[]' unixcop.json 
{
  "name": "TV",
  "id": "213"
}
{
  "name": "speaker",
  "id": "123"
}
{
  "name": "keyboard",
  "id": "432"
}
qadry@unixcop:~$ 

Pour sortir uniquement le deuxième tableau, nous pouvons modifier 1 dans l'opérateur de tableau à la commande ci-dessus de la manière suivante :

qadry@unixcop:~$ jq '.[1]' unixcop.json 
{
  "name": "speaker",
  "id": "123"
}
qadry@unixcop:~$ 

Remarque :le tableau commence à 0

Si nous voulons accéder à la propriété name dans le troisième tableau, nous exécuterons la commande suivante :

qadry@unixcop:~$ jq '.[2].name' unixcop.json 
"keyboard"
qadry@unixcop:~$ 

Nous pouvons également utiliser .[3] pour accéder au 4ème tableau et nous nous assurons qu'il sera nul.

qadry@unixcop:~$ jq '.[3].name' unixcop.json 
null
qadry@unixcop:~$ 

De plus, pour accéder à toutes les propriétés de nom à l'intérieur des tableaux, nous pouvons exécuter cette commande :

qadry@unixcop:~$ jq '.[].name' unixcop.json 
"TV"
"speaker"
"keyboard"
qadry@unixcop:~$ 

Conclusion

La commande JQ est utilisée pour transformer les données JSON dans un format plus lisible et les imprimer sur la sortie standard sous Linux. La commande JQ est construite autour de filtres qui sont utilisés pour rechercher et imprimer uniquement les données requises à partir d'un fichier JSON.


Linux
  1. Commande Linux wc avec exemples

  2. Commande de tri Linux avec exemples

  3. Commande Echo sous Linux (avec exemples)

  4. Commande Linux Tee avec exemples

  5. Commande principale Linux avec exemples

Commande Linux watch avec exemples

Commande Wait sous Linux avec des exemples

Commande d'exportation Linux avec exemples

Commande de redémarrage sous Linux avec des exemples

Commande Linux PS avec exemples

Commande IP Linux avec exemples