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.
> Cukup kuat sampai-sampai termasuk dalam 5 alat CLI yang wajib dipelajari para developer,
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,
> jq ada di setiap video “lima command line tools yang perlu dipelajari sebagai developer” di YouTube.
ternyata ada kalimat seperti itu.
Empat sisanya memang tidak disebutkan secara spesifik, jadi sepertinya
jqmemang selalu muncul di video rekomendasi CLI tool semacam itu wkwk.