jq ile JSON alanlarını filtreleme

0 ردود 5 مشاهدات
المقيّمون
المشاركون
صاحب الموضوع #1
jq ile JSON alanlarını filtreleme

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?

يجب تسجيل الدخول للرد.

المستخدمون الذين يشاهدون هذا الموضوع (الإجمالي: 1, الأعضاء: 1, الضيوف: 0)
الإجمالي: 1 (الأعضاء: 1, الضيوف: 0)
0 اقتباسات محددة