Автор темы
#1
jq ile JSON alanlarını filtreleme
Giriş ve temel kavramlar
Anahtar filtreleme teknikleri
Örnek: cat veriler.json | jq '.kullanici.isim'
Örnek: cat veriler.json | jq '.kullanici | {id, isim}'
Örnek: cat veriler.json | jq '.kullanicilar[] | .id'
Örnek: cat veriler.json | jq '.kullanicilar[] | select(.aktif) | .isim'
Örnek: cat veriler.json | jq '.kullanici.adres // "bilinmiyor"'
Gelişmiş örnekler
Örnek çıktı: { "id": 1, "ad": "Ayşe" }
Örnek: cat skorlar.json | jq 'map(select(.puan >= 80) | {isim, puan})'
Örnek: cat veri.json | jq 'to_entries | map({anahtar: .key, deger: .value})'
Kullanım ipuçları
Örnekler: jq -r '.kullanici.isim' veriler.json; jq -c '.kullanicilar[]' veriler.json
Bu konudaki deneyimlerinizi ve karşılaştığınız zor durumları paylaşın. Özellikle karmaşık JSON yapılarında hangi ifadelerle hangi sonuçları elde ettiniz?
Karışık JSON yapılarında hangi alanları çekmek istediğinizi basit ve güvenilir biçimde seçmek için jq kullanımı günlük iş akışınıza netlik kazandırır. Bu yazıda temel filtreleme uygulamalarını ve pratik örnekleri derledim.
Giriş ve temel kavramlar
- jq, JSON verisini işlemek için komut satırında çalışan güçlü bir araçtır. Genelde dosyada saklanan veya akış halinde gelen JSON üzerinde filtreleme, dönüştürme ve özetleme işlemleri için kullanılır.
- Temel akış şu şekildedir: cat dosya.json | jq 'bileşen' veya jq 'bileşen' dosya.json
- Bileşenler, JSON içindeki anahtarlar, diziler ve birleşik ifadelerden oluşur. Örneğin { "kullanici": { "id": 123, "isim": "Ali" } } yapıdaki bir veriden sadece isim kısmını almak için .kullanici.isim ifadesi kullanılır.
Anahtar filtreleme teknikleri
- Tekil alanları seçme: .kullanici.isim
Örnek: cat veriler.json | jq '.kullanici.isim'
- Dizin üzerinden geniş seçim: .kullanici.[ "id", "isim" ]
Örnek: cat veriler.json | jq '.kullanici | {id, isim}'
- Tüm elemanları filtreleme (dizi): .kullanicilar[].id
Örnek: cat veriler.json | jq '.kullanicilar[] | .id'
- Koşullu filtreleme: .kullanicilar[] | select(.aktif == true) | .isim
Örnek: cat veriler.json | jq '.kullanicilar[] | select(.aktif) | .isim'
- Null güvenliği ve varsayılan değerler: (.kullanici.adres // "bilinmiyor")
Örnek: cat veriler.json | jq '.kullanici.adres // "bilinmiyor"'
Gelişmiş örnekler
- Dizideki belirli alanları yeniden yapılandırma: .kullanicilar[] | {id: .id, ad: .isim}
Örnek çıktı: { "id": 1, "ad": "Ayşe" }
- Filtre ve dönüşüm kombinasyonu: map(select(.puan >= 80) | {isim, puan})
Örnek: cat skorlar.json | jq 'map(select(.puan >= 80) | {isim, puan})'
- Nesnelerden anahtar-değer çiftlerini çekme: to_entries | map({anahtar: .key, deger: .value})
Örnek: cat veri.json | jq 'to_entries | map({anahtar: .key, deger: .value})'
Kullanım ipuçları
- Dosya yerine doğrudan girdiyi kullanmak için: jq '.kullanici' < veri.json
- Çok satırlı JSON için -r (raw output) olmadan insan okuyucu çıktı almak, ayrıca -c ile kompakt çıktı almak.
Örnekler: jq -r '.kullanici.isim' veriler.json; jq -c '.kullanicilar[]' veriler.json
- Hatalı veya eksik alanlar için güvenli alternatifler: .kullanici.bilgi // {} ile eksik alanlarda bozulmadan çalışmak
Bu konudaki deneyimlerinizi ve karşılaştığınız zor durumları paylaşın. Özellikle karmaşık JSON yapılarında hangi ifadelerle hangi sonuçları elde ettiniz?
