GNU/Linux >> Znalost Linux >  >> Linux

JQ Command v Linuxu s příklady

Úvod

jq je lehký a flexibilní procesor JSON příkazového řádku.

jq je jako sed pro data JSON – můžete jej použít k rozdělení, filtrování, mapování a transformaci strukturovaných dat se stejnou lehkostí, jakou vám sed, awk, grep a friends umožňují hrát si s textem.

Také jq napsaný v přenosném C a nemá žádné závislosti na běhu. Můžete si stáhnout jeden binární soubor, scp ho na vzdálený počítač stejného typu a očekávat, že to bude fungovat.

jq dokáže změnit formát dat, který máte, do požadovaného formátu s velmi malým úsilím a program k tomu je často kratší a jednodušší, než byste očekávali.

V tomto článku se naučíme používat příkaz JQ k manipulaci a práci s daty JSON v prostředí Linux.

Nainstalujte příkaz JQ

Příkaz JQ není v některých distribucích Linuxu standardně dostupný; Před použitím je třeba jej stáhnout do systému. Příkaz JQ si můžete stáhnout stejně jako jakýkoli jiný balíček ve vašem systému. Na Ubuntu použijte níže uvedený příkaz k instalaci nástroje 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:~$

A použijte tento příkaz níže, pokud provozujete distribuci jako CentOS 8, která již má JQ ve výchozím nastavení, získáte výstup podobný tomuto:

sudo dnf install jq 

Syntaxe

Podívejme se na syntaxi příkazu JQ:

jq [options]  [file...]

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

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

Uspořádejte data JSON pomocí příkazu JQ

JQ organizuje a upravuje data JSON při tisku na standardní výstup.

Takže v tomto příkladu máme soubor JSON s názvem unixcop.json a potřebujeme výstup dat na standardní výstup:

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

Data vytištěná na standardní výstup pomocí příkazu cat jsou neuspořádaná a chaotická. Tato data můžeme uspořádat pomocí příkazu JQ níže

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

Nyní jsou data mnohem organizovanější a snáze srozumitelná. Tento filtr je zvláště potřebný při přístupu k datům z API; Data uložená v rozhraních API mohou být velmi neuspořádaná a matoucí.

Přístup k vlastnosti pomocí příkazu JQ

Pole . filtr spolu s příkazem JQ can_be použít k přístupu k vlastnosti objektu v shellu.

Můžeme použít .pole operátor. Například pro přístup k vlastnosti produktu můžeme použít tento příkaz:

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

K položkám přítomným ve vlastnosti můžeme také přistupovat pomocí .pole operátor. Pro přístup k položce názvu ve vlastnosti produktu použijeme:

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

Přístup k položce pole pomocí příkazu JQ

Můžeme také přistupovat k prvkům přítomným v poli v souboru JSON a vytvářet jejich výstup pomocí .[] operátor. V tomto příkladu upravíme náš soubor JSON tak, aby vypadal takto:

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

Pro výstup pouze druhého pole můžeme upravit 1 v operátoru pole na výše uvedený příkaz následujícím způsobem:

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

Poznámka :pole začíná na 0

Pokud chceme získat přístup k vlastnosti name ve třetím poli, spustíme následující příkaz:

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

Také můžeme použít .[3] pro přístup ke 4. poli a zajistíme, že bude null.

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

Pro přístup ke všem vlastnostem názvu uvnitř polí můžeme také provést tento příkaz:

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

Závěr

Příkaz JQ se používá k transformaci dat JSON do čitelnějšího formátu a jejich tisku na standardní výstup v systému Linux. Příkaz JQ je postaven na filtrech, které se používají k vyhledání a tisku pouze požadovaných dat ze souboru JSON.


Linux
  1. wc Linux Command s příklady

  2. Linux Tee Command s příklady

  3. Příkaz linuxové hlavy s příklady

  1. Linux řazení příkazů s příklady

  2. Echo Command v Linuxu (s příklady)

  3. man Command v Linuxu s příklady

  1. Příkaz AWK v Linuxu s příklady

  2. Curl Command v Linuxu s příklady

  3. Echo Command v Linuxu s příklady