GNU/Linux >> Belajar Linux >  >> Linux

Perintah JQ di Linux dengan Contoh

Pengantar

jq adalah prosesor JSON baris perintah yang ringan dan fleksibel.

jq seperti sed untuk data JSON – Anda dapat menggunakannya untuk mengiris dan memfilter serta memetakan dan mengubah data terstruktur dengan kemudahan yang sama seperti sed, awk, grep, dan teman yang memungkinkan Anda bermain dengan teks.

Juga jq ditulis dalam C portabel, dan tidak memiliki ketergantungan runtime. Anda dapat mengunduh satu biner, scp ke mesin yang jauh dari jenis yang sama, dan berharap itu berfungsi.

jq dapat mengubah format data yang Anda miliki menjadi format yang Anda inginkan dengan sedikit usaha, dan program untuk melakukannya seringkali lebih pendek dan sederhana dari yang Anda harapkan.

Dalam artikel ini, kita akan belajar menggunakan perintah JQ untuk memanipulasi dan bekerja dengan data JSON di shell Linux.

Instal perintah JQ

Perintah JQ tidak tersedia di beberapa distribusi Linux secara default; Itu perlu diunduh ke dalam sistem sebelum dapat digunakan. Anda dapat mengunduh perintah JQ sama seperti paket lain di sistem Anda. Di Ubuntu gunakan perintah yang diberikan di bawah ini untuk menginstal utilitas 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:~$

Dan gunakan perintah di bawah ini jika Anda menjalankan distribusi seperti CentOS 8 yang sudah memiliki JQ secara default maka Anda akan mendapatkan output seperti ini:

sudo dnf install jq 

Sintaks

Mari kita lihat sintaks dari perintah JQ:

jq [options]  [file...]

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

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

Mengatur data JSON menggunakan perintah JQ

JQ mengatur dan mempercantik data JSON saat mencetaknya ke output standar.

Jadi Dalam contoh ini, kami memiliki file JSON bernama unixcop.json dan kami perlu menampilkan data ke output standar:

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

Data yang dicetak ke output standar menggunakan perintah cat tidak terorganisir dan berantakan. Kita dapat mengatur data ini dengan menggunakan perintah JQ di bawah ini

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

Sekarang data menjadi jauh lebih terorganisir dan lebih mudah dipahami. Filter ini sangat dibutuhkan saat mengakses data dari API; Data yang disimpan dalam API bisa sangat tidak teratur dan membingungkan.

Mengakses Properti menggunakan perintah JQ

.bidang filter bersama dengan perintah JQ can_be digunakan untuk mengakses properti objek di shell.

Kita dapat menggunakan .field operator. Misalnya untuk mengakses properti produk kita dapat menggunakan perintah ini:

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

Kami juga dapat mengakses item yang ada di dalam properti dengan menggunakan .field operator. Untuk mengakses item nama di properti produk, kami akan menggunakan:

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

Mengakses Item Array menggunakan perintah JQ

Kami juga dapat mengakses dan menampilkan elemen yang ada dalam array dalam file JSON dengan menggunakan .[] operator. Untuk contoh ini kita akan memodifikasi file JSON kita sehingga terlihat seperti ini:

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

Untuk menampilkan hanya larik kedua, kita dapat memodifikasi 1 di operator array ke perintah yang diberikan di atas dengan cara berikut:

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

Catatan :array dimulai dari 0

Jika kita ingin mengakses properti nama pada larik ketiga maka kita akan menjalankan perintah berikut:

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

Kami juga dapat menggunakan .[3] untuk mengakses larik ke-4 dan kami memastikan bahwa itu akan menjadi nol.

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

Juga untuk mengakses semua properti nama di dalam array, kita dapat menjalankan perintah ini:

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

Kesimpulan

Perintah JQ digunakan untuk mengubah data JSON menjadi format yang lebih mudah dibaca dan mencetaknya ke output standar di Linux. Perintah JQ dibangun di sekitar filter yang digunakan untuk menemukan dan mencetak hanya data yang diperlukan dari file JSON.


Linux
  1. Perintah wc Linux dengan Contoh

  2. Perintah Tee Linux dengan Contoh

  3. Perintah kepala Linux dengan Contoh

  1. Perintah sortir Linux dengan Contoh

  2. Perintah Echo di Linux (Dengan Contoh)

  3. Perintah man di Linux dengan Contoh

  1. Perintah AWK di Linux dengan Contoh

  2. Perintah Curl di Linux dengan Contoh

  3. Perintah Gema di Linux dengan Contoh