GNU/Linux >> Belajar Linux >  >> Linux

Cara Mengurai Dan Mencetak JSON Dengan Alat Baris Perintah Linux

JSON adalah format penyimpanan data independen yang ringan dan bahasa, mudah diintegrasikan dengan sebagian besar bahasa pemrograman dan juga mudah dipahami oleh manusia, tentu saja jika diformat dengan benar. Kata JSON adalah singkatan dari J avaS krip O objek N otation, meskipun dimulai dengan JavaScript, dan terutama digunakan untuk bertukar data antara server dan browser, tetapi sekarang digunakan di banyak bidang termasuk sistem tertanam. Di sini kita akan mengurai dan mencetak JSON dengan alat baris perintah di Linux. Ini sangat berguna untuk menangani data JSON besar dalam skrip shell, atau memanipulasi data JSON dalam skrip shell.

Apa itu pencetakan cantik?

Data JSON disusun agar lebih mudah dibaca manusia. Namun dalam kebanyakan kasus, data JSON disimpan dalam satu baris, bahkan tanpa karakter akhir baris.

Jelas itu sangat tidak nyaman untuk membaca dan mengedit secara manual.

Saat itulah cetakan cantik berguna. Namanya cukup jelas, memformat ulang teks JSON agar lebih terbaca oleh manusia. Ini dikenal sebagai pencetakan cantik JSON .

Mengurai dan mencetak JSON dengan cantik menggunakan jq di linux

Data JSON dapat diuraikan dengan pemroses teks baris perintah seperti awk , sed dan gerp . Sebenarnya JSON.awk adalah skrip awk untuk melakukan itu. Namun ada beberapa alat khusus untuk tujuan yang sama.

  1. jq atau jshon , JSON parser untuk shell, keduanya cukup berguna.
  2. Skrip shell seperti JSON.sh atau jsonv.sh untuk mengurai JSON di bash, zsh atau dash shell.
  3. JSON.awk , skrip awk parser JSON.
  4. Modul Python seperti json.tool .
  5. garis bawah-cli , Node.js dan berbasis javascript.

Dalam tutorial ini saya hanya fokus pada jq , yang merupakan parser JSON yang cukup kuat untuk shell dengan kemampuan pemfilteran dan pembuatan skrip tingkat lanjut.

JSON mencetak cantik

Data JSON bisa jadi satu dan hampir tidak terbaca oleh manusia, jadi untuk membuatnya agak mudah dibaca, pencetakan cantik JSON ada di sini.

Contoh: Data dari jsonip.com , untuk mendapatkan alamat IP eksternal dalam format JSON, gunakan curl atau wget alat seperti di bawah ini.

$ wget -cq http://jsonip.com/ -O -

Data sebenarnya terlihat seperti ini:

{"ip":"111.222.333.444","about":"/about","Pro!":"http://getjsonip.com"}

Sekarang cukup cetak dengan jq:

$ wget -cq http://jsonip.com/ -O - | jq '.'

Ini akan terlihat seperti di bawah ini, setelah memfilter hasilnya dengan jq.

{

   "ip": "111.222.333.444",

   "about": "/about",

   "Pro!": "http://getjsonip.com"

}

Hal yang sama dapat dilakukan dengan python json.tool modul. Ini contohnya:

$ cat anything.json | python -m json.tool

Solusi berbasis Python ini seharusnya baik untuk sebagian besar pengguna, tetapi tidak terlalu berguna jika Python tidak diinstal sebelumnya atau tidak dapat diinstal, seperti pada sistem tertanam.

Namun modul python json.tool memiliki keunggulan tersendiri, yaitu lintas platform. Jadi, Anda dapat menggunakannya dengan lancar di Windows, Linux, atau mac OS.

Bacaan yang disarankan:

  • Prettyping – Membuat Output Perintah Ping Lebih Cantik Dan Lebih Mudah Dibaca

Cara mengurai JSON dengan jq

Pertama, Anda perlu menginstal jq, itu sudah diambil oleh sebagian besar distribusi GNU/Linux, instal dengan perintah penginstal paket masing-masing.

Di Arch Linux:

$ sudo pacman -S jq

Di Debian, Ubuntu, Linux Mint:

$ sudo apt-get install jq

Di Fedora:

$ sudo dnf install jq

Di openSUSE:

$ sudo zypper install jq

Untuk OS atau platform lain, lihat petunjuk penginstalan resmi.

Filter dasar dan pengenal jq

jq bisa membaca data JSON baik dari stdin atau file . Anda harus menggunakan keduanya tergantung pada situasinya.

Simbol tunggal . adalah filter paling dasar. Filter ini juga disebut sebagai indeks pengenal objek . Menggunakan tunggal. bersama dengan jq pada dasarnya cukup mencetak file JSON input.

Kutipan tunggal - Anda tidak harus selalu menggunakan kutipan tunggal. Tetapi jika Anda menggabungkan beberapa filter dalam satu baris, maka Anda harus menggunakannya.

Kutipan ganda - Anda harus menyertakan karakter khusus seperti @ , # , $ dalam dua tanda kutip ganda, seperti contoh ini, jq .foo."@bar"

Cetak data mentah - Untuk alasan apa pun, jika Anda hanya membutuhkan data akhir yang diuraikan, tidak diapit dalam tanda kutip ganda, gunakan tanda -r dengan perintah jq, seperti ini. - jq -r .foo.bar .

Mengurai data tertentu

Untuk memfilter bagian tertentu dari JSON, Anda harus melihat hierarki data file JSON yang dicetak cantik.

Contoh data JSON, dari Wikipedia:

{

  "firstName": "John",

  "lastName": "Smith",

  "age": 25,

  "address": {

    "streetAddress": "21 2nd Street",

    "city": "New York",

    "state": "NY",

    "postalCode": "10021"

},

  "phoneNumber": [

{

  "type": "home",

  "number": "212 555-1234"

},

{

  "type": "fax",

  "number": "646 555-4567"

}

],

  "gender": {

  "type": "male"

  }

}

Saya akan menggunakan data JSON ini sebagai contoh dalam tutorial ini, menyimpannya sebagai sample.json .

Katakanlah saya ingin memfilter alamat dari file sample.json. Jadi perintahnya harus seperti:

$ jq .address sample.json

Contoh keluaran:

{

  "streetAddress": "21 2nd Street",

  "city": "New York",

  "state": "NY",

  "postalCode": "10021"

}

Sekali lagi katakanlah saya ingin kode pos, lalu saya harus menambahkan indeks pengenal objek yang lain , yaitu filter lain.

$ cat sample.json | jq .address.postalCode

Perhatikan juga bahwa filter peka huruf besar/kecil dan Anda harus menggunakan string yang sama persis untuk mendapatkan keluaran yang berarti, bukan nol.

Mengurai elemen dari larik JSON

Elemen array JSON diapit dalam tanda kurung siku, tidak diragukan lagi cukup serbaguna untuk digunakan.

Untuk mengurai elemen dari larik, Anda harus menggunakan []pengidentifikasi bersama dengan indeks pengenal objek lainnya.

Dalam contoh data JSON ini, nomor telepon disimpan di dalam larik, untuk mendapatkan semua konten dari larik ini, Anda hanya perlu menggunakan tanda kurung, seperti contoh ini.

$ jq .phoneNumber[] sample.json

Katakanlah Anda hanya menginginkan elemen pertama dari array, lalu gunakan nomor objek array mulai dari 0, untuk item pertama, gunakan [0] , untuk item berikutnya, itu harus bertambah satu setiap langkah.

$ jq .phoneNumber[0] sample.json

Contoh pembuatan skrip

Katakanlah saya hanya menginginkan nomor untuk rumah, bukan seluruh data array JSON. Di sinilah scripting dalam perintah jq berguna.

$ cat sample.json | jq -r '.phoneNumber[] | select(.type == "home") | .number'

Di sini pertama-tama saya menyalurkan hasil dari satu filer ke filer lainnya, lalu menggunakan atribut select untuk memilih jenis data tertentu, sekali lagi menyalurkan hasilnya ke filter lain.

Menjelaskan setiap jenis filter jq dan skrip berada di luar cakupan dan tujuan tutorial ini. Sangat disarankan untuk membaca manual JQ untuk pemahaman yang lebih baik yang diberikan di bawah ini.


Linux
  1. Cara memprogram dengan Bash:Sintaks dan alat

  2. Cara Menemukan File Dengan Izin SUID dan SGID di Linux

  3. Cara Zip File dan Direktori di Linux (dengan Contoh)

  1. Flatpak di Linux:Apa Itu dan Bagaimana Menginstal Aplikasi dengannya

  2. Cara Mencetak File JSON dengan Cantik di Terminal Linux

  3. Cara Bekerja Dengan Pengguna Dan Grup Di Linux

  1. Bagaimana saya menggunakan Stream Deck di Linux dengan alat sumber terbuka

  2. Bagaimana Mengurai Json Dengan Shell Scripting Di Linux?

  3. Cara mencetak range alamat IP dengan perintah seq Linux