jq ile JSON Dönüştürme: İnteraktif Rehber
(navendu.me)- jq, JSON verilerini işlemek için kullanılan bir komut satırı aracıdır ve çoğu Linux dağıtımında varsayılan olarak yüklü gelir
- JSON verilerini okunaklı biçimde yazdırmak (
pretty print) veya filtreler kullanarak verileri dönüştürmek için kullanışlıdır - Geliştiricilerin mutlaka öğrenmesi gereken 5 CLI aracından biri sayılacak kadar güçlüdür ve JSON verileriyle ilgili çeşitli işleri basitçe yapmayı sağlar
jq kurulumu ve temel kullanım
-
Kurulum yöntemi
- jq çoğu paket yöneticisiyle kurulabilir; ayrıca ikili dosya doğrudan indirilebilir veya kaynaktan derlenebilir
- Kurulumdan sonra
jqkomutuyla çalıştığı doğrulanabilir
-
Temel kullanım örneği
- JSON verisini okunaklı biçimde yazdırma:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- JSON verisini okunaklı biçimde yazdırma:
-
JSON filtre örneği
- Belirli bir koşula uyan verileri filtreleme:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- Belirli bir koşula uyan verileri filtreleme:
jq’nun başlıca özellikleri
Temel filtreler
-
Identity filtresi
- Girdi verisini değiştirmeden çıktı olarak verir:
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- Girdi verisini değiştirmeden çıktı olarak verir:
-
Belirli alanlara erişim
- JSON nesnesindeki belirli bir alanı seçme:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name' - İç içe alanlara erişim:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- JSON nesnesindeki belirli bir alanı seçme:
Dizi işleme
-
Dizi öğelerine erişim
- JSON dizisinde belirli bir indeksteki öğeyi seçme:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- JSON dizisinde belirli bir indeksteki öğeyi seçme:
-
Dizi dilimleme
- Belirli bir aralıktaki alt diziyi çıkarma:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- Belirli bir aralıktaki alt diziyi çıkarma:
-
Diziyi yinelemeli işleme
- Dizinin her öğesine filtre uygulama:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- Dizinin her öğesine filtre uygulama:
Yeni JSON oluşturma
-
Yeni nesne oluşturma
- Seçilen alanlarla yeni bir JSON nesnesi oluşturma:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- Seçilen alanlarla yeni bir JSON nesnesi oluşturma:
-
Yeni dizi oluşturma
- Dönüştürülmüş verilerle bir dizi oluşturma:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- Dönüştürülmüş verilerle bir dizi oluşturma:
jq’nun gelişmiş özellikleri
Fonksiyon kullanımı
-
Uzunluk hesaplama
- Metin uzunluğunu hesaplama:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- Metin uzunluğunu hesaplama:
-
Anahtar çıkarma
- Nesnenin anahtarlarını dizi olarak döndürme:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- Nesnenin anahtarlarını dizi olarak döndürme:
-
map fonksiyonu
- Dizinin her öğesine filtre uygulama:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- Dizinin her öğesine filtre uygulama:
Veri seçimi
- Koşula uyan veriyi seçme
- Belirli bir koşulu sağlayan verileri filtreleme:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- Belirli bir koşulu sağlayan verileri filtreleme:
JSON dönüştürme ve kullanım
-
Gelişmiş JSON dönüştürme
- Verileri gruplandıran veya istatistik hesaplayan filtreler:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- Verileri gruplandıran veya istatistik hesaplayan filtreler:
-
Büyük ölçekli JSON işleme
- Büyük miktardaki JSON verisini verimli biçimde işleme:
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- Büyük miktardaki JSON verisini verimli biçimde işleme:
-
jq Playground üzerinde pratik yapılabilir
3 yorum
Özet için teşekkürler! Gerçekten çok faydalı bir bilgi.
> Geliştiricilerin mutlaka öğrenmesi gereken 5 CLI aracına girecek kadar güçlü ve
Ama geri kalan 4 CLI aracının ne olduğunu da merak ediyorum; yazıda bundan bahsedilmediği için biraz MacGuffin'e dönüşmüş..
https://navendu.me/posts/jq-interactive-guide/….
Aslına bakınca
> jq is on every “five command line tools to learn as a developer” video on YouTube.
diye bir ifade var.
Geri kalan 4 tanesi özellikle belirtilmemiş; sanırım bu tarz CLI araç öneri videolarında hep anılıyor haha