GNU/Linux >> Linux Esercitazione >  >> Linux

Comando JQ in Linux con esempi

Introduzione

jq è un processore JSON a riga di comando leggero e flessibile.

jq è come sed per i dati JSON:puoi usarlo per suddividere, filtrare, mappare e trasformare i dati strutturati con la stessa facilità con cui sed, awk, grep e friends ti permettono di giocare con il testo.

Anche jq scritto in C portatile e ha zero dipendenze di runtime. Puoi scaricare un singolo binario, scp su una macchina lontana dello stesso tipo e aspettarti che funzioni.

jq può trasformare il formato dei dati che hai in quello che desideri con il minimo sforzo e il programma per farlo è spesso più breve e più semplice di quanto ti aspetteresti.

In questo articolo impareremo a usare il comando JQ per manipolare e lavorare con i dati JSON in una shell Linux.

Installa il comando JQ

Il comando JQ non è disponibile in alcune distribuzioni Linux per impostazione predefinita; Deve essere scaricato nel sistema prima di poter essere utilizzato. Puoi scaricare il comando JQ proprio come qualsiasi altro pacchetto sul tuo sistema. Su Ubuntu usa il comando indicato di seguito per installare l'utilità 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:~$

E usa questo comando di seguito se stai eseguendo una distribuzione come CentOS 8 che ha già JQ per impostazione predefinita, otterrai un output simile a questo:

sudo dnf install jq 

Sintassi

Diamo un'occhiata alla sintassi del comando JQ:

jq [options]  [file...]

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

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

Organizzare i dati JSON utilizzando il comando JQ

JQ organizza e abbellisce i dati JSON durante la stampa su output standard.

Quindi, in questo esempio, abbiamo un file JSON chiamato unixcop.json e dobbiamo restituire i dati allo standard output:

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

I dati stampati sull'output standard utilizzando il comando cat sono disorganizzati e disordinati. Possiamo organizzare questi dati usando il comando JQ qui sotto

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

Ora i dati sono diventati molto più organizzati e più facili da capire. Questo filtro è particolarmente necessario quando si accede ai dati dalle API; I dati archiviati nelle API possono essere molto disorganizzati e confusi.

Accedi a una proprietà usando il comando JQ

Il .campo filter insieme al comando JQ può_essere usato per accedere alla proprietà dell'oggetto nella shell.

Possiamo usare il .field operatore. Ad esempio per accedere alle proprietà del prodotto possiamo utilizzare questo comando:

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

Possiamo anche accedere agli elementi presenti all'interno della proprietà utilizzando il .field operatore. Per accedere alla voce nome nella proprietà del prodotto utilizzeremo:

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

Accedi a un elemento dell'array utilizzando il comando JQ

Possiamo anche accedere e restituire gli elementi presenti all'interno di un array in un file JSON utilizzando il .[] operatore. Per questo esempio modificheremo il nostro file JSON in modo che assomigli a questo:

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:~$ 

Per produrre solo il secondo array possiamo modificare 1 nell'operatore di array al comando sopra indicato nel modo seguente:

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

Nota :l'array parte da 0

Se vogliamo accedere alla proprietà name nel terzo array, eseguiremo il seguente comando:

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

Inoltre possiamo usare .[3] per accedere al 4° array e ci assicuriamo che sia nullo.

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

Anche per accedere a tutte le proprietà del nome all'interno degli array possiamo eseguire questo comando:

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

Conclusione

Il comando JQ viene utilizzato per trasformare i dati JSON in un formato più leggibile e stamparli sull'output standard su Linux. Il comando JQ è basato su filtri utilizzati per trovare e stampare solo i dati richiesti da un file JSON.


Linux
  1. Comando wc Linux con esempi

  2. Comando di ordinamento Linux con esempi

  3. Comando Echo in Linux (con esempi)

  4. Comando Tee Linux con esempi

  5. Comando testa di Linux con esempi

Comando Linux watch con esempi

Attendi comando in Linux con esempi

Comando di esportazione Linux con esempi

Riavvia il comando in Linux con esempi

Comando PS Linux con esempi

Comando IP Linux con esempi