Mengubah JSON dengan jq: Panduan Interaktif
(navendu.me)- jq adalah alat baris perintah untuk menangani data JSON, dan sudah terpasang secara default di sebagian besar distribusi Linux
- Berguna untuk menampilkan data JSON agar lebih mudah dibaca (pretty print), atau mengubah data dengan menggunakan filter
- Cukup kuat hingga termasuk dalam 5 alat CLI yang wajib dipelajari developer, dan dapat menyederhanakan berbagai pekerjaan saat menangani data JSON
Instalasi jq dan penggunaan dasar
-
Cara instalasi
- jq dapat dipasang lewat sebagian besar package manager, atau dengan mengunduh binari secara langsung maupun membangunnya dari source
- Setelah terpasang, Anda bisa memastikan jq berjalan dengan memakai perintah
jq
-
Contoh penggunaan dasar
- Menampilkan data JSON agar lebih mudah dibaca:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- Menampilkan data JSON agar lebih mudah dibaca:
-
Contoh filter JSON
- Memfilter data yang sesuai dengan kondisi tertentu:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- Memfilter data yang sesuai dengan kondisi tertentu:
Fitur utama jq
Filter dasar
-
Filter Identity
- Mengeluarkan data input tanpa perubahan:
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- Mengeluarkan data input tanpa perubahan:
-
Mengakses field tertentu
- Memilih field tertentu dari objek JSON:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name' - Mengakses field bertingkat:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- Memilih field tertentu dari objek JSON:
Pemrosesan array
-
Mengakses elemen array
- Memilih elemen pada indeks tertentu dari array JSON:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- Memilih elemen pada indeks tertentu dari array JSON:
-
Slicing array
- Mengekstrak subarray dalam rentang tertentu:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- Mengekstrak subarray dalam rentang tertentu:
-
Iterasi array
- Menerapkan filter ke setiap elemen array:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- Menerapkan filter ke setiap elemen array:
Membuat JSON baru
-
Membuat objek baru
- Membuat objek JSON baru dari field yang dipilih:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- Membuat objek JSON baru dari field yang dipilih:
-
Membuat array baru
- Membuat array dari data yang telah ditransformasikan:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- Membuat array dari data yang telah ditransformasikan:
Fitur lanjutan jq
Memanfaatkan fungsi
-
Menghitung panjang
- Menghitung panjang string:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- Menghitung panjang string:
-
Mengekstrak key
- Mengembalikan key objek sebagai array:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- Mengembalikan key objek sebagai array:
-
Fungsi map
- Menerapkan filter ke setiap elemen array:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- Menerapkan filter ke setiap elemen array:
Memilih data
- Memilih data yang sesuai kondisi
- Memfilter data yang memenuhi kondisi tertentu:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- Memfilter data yang memenuhi kondisi tertentu:
Transformasi dan pemanfaatan JSON
-
Transformasi JSON tingkat lanjut
- Filter untuk mengelompokkan data atau menghitung statistik:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- Filter untuk mengelompokkan data atau menghitung statistik:
-
Menangani JSON skala besar
- Memproses data JSON dalam jumlah besar secara efisien:
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- Memproses data JSON dalam jumlah besar secara efisien:
-
Bisa dipraktikkan di jq Playground
3 komentar
Terima kasih atas ringkasannya! Ini benar-benar informasi yang sangat berguna.
Tapi saya juga jadi penasaran 4 alat CLI lainnya itu apa; sayangnya itu tidak disebutkan di artikelnya, jadi malah jadi semacam MacGuffin..
https://navendu.me/posts/jq-interactive-guide/….
Setelah melihat artikel aslinya,
Empat sisanya memang tidak disebutkan secara spesifik, jadi sepertinya
jqmemang selalu muncul di video rekomendasi CLI tool semacam itu wkwk.