jq ile JSON Verilerini Dönüştürme: Güçlü Komut Satırı Aracı ⚙️
🎯 Bu Rehberde Ne Öğreneceksiniz
Bu rehberde, jq komut satırı aracını kullanarak büyük ve karmaşık JSON verilerini nasıl hızlıca filtreleyeceğinizi, dönüştüreceğinizi ve yeni yapılar oluşturacağınızı öğreneceksiniz.
YZ/ML (Yapay Zeka / Makine Öğrenimi) iş akışları ve DevOps süreçleri için vazgeçilmez olan bu araç sayesinde API yanıtlarını, günlük dosyalarını veya Kubernetes çıktılarından istediğiniz bilgiyi tek satır komutla çekebileceksiniz.
🧠 Teknik Özet
Ana Teknik Konu: jq (Command-line JSON Processor) kullanımı
Çözülen Problem:
JSON formatlı karmaşık verilerde filtreleme, toplama ve dönüştürme işlemlerini hızlı ve güvenilir biçimde yapmak.
İzlenen Adımlar:
- jq kurulumu ve kimlik operatörü ile test
- Dizi yineleme (.[]) ve veri çekme (.ad)
- Toplama ve eşleme (map, add)
- Koşullu filtreleme (select)
- Sonuçları tek bir JSON yapısında birleştirme
⚙️ 1. jq Kurulumu
Ubuntu / Debian Sistemlerinde
sudo apt install jq
macOS (Homebrew)
brew install jq
Windows Resmî jq sayfasından binary dosyasını indirip PATH’e ekleyin. Kurulumu doğrulamak için:
jq --version
🧩 2. İlk jq Komutunu Çalıştırma
Bir deneme JSON dosyası oluşturun:
nano denizCanlilari.json
Aşağıdaki içeriği kaydedin:
[
{ "ad": "Sammy", "tur": "köpekbalığı", "istridye": 5 },
{ "ad": "Bubbles", "tur": "orka", "istridye": 3 },
{ "ad": "Splish", "tur": "yunus", "istridye": 2 },
{ "ad": "Splash", "tur": "yunus", "istridye": 2 }
]
Kimlik Operatörü (.)
jq '.' denizCanlilari.json
Bu komut JSON’u pretty print olarak gösterir ve dosyayı değiştirmez.
🔍 3. Veri Çekme ve Filtreleme (.[] ve |)
jq '.[]' denizCanlilari.json
Her dizi elemanını ayrı ayrı listeler. Sadece ad alanlarını çekmek için:
jq '.[] | .ad' denizCanlilari.json
Tırnak işaretlerini kaldırmak istersen:
jq -r '.[] | .ad' denizCanlilari.json
➕ 4. Toplama ve Eşleme (map ve add)
Tüm istiridye sayılarını listele:
jq 'map(.istridye)' denizCanlilari.json
Toplamı bulmak için:
jq 'map(.istridye) | add' denizCanlilari.json
Çıktı: 12
⚙️ 5. Koşullu Hesaplama (select)
Sadece “yunus” türündeki canlıların istiridyelerini toplayalım:
jq 'map(select(.tur == "yunus").istridye) | add' denizCanlilari.json
Çıktı: 4
🧱 6. Verileri Yeni JSON Yapısına Dönüştürme
Tüm sonuçları tek JSON nesnesinde birleştirin:
jq '{
canlilar: map(.ad),
toplamIstiridye: map(.istridye) | add,
yunusIstiridye: map(select(.tur == "yunus").istridye) | add
}' denizCanlilari.json
Çıktı:
{
"canlilar": ["Sammy", "Bubbles", "Splish", "Splash"],
"toplamIstiridye": 12,
"yunusIstiridye": 4
}
🚀 İleri Düzey jq Teknikleri ve Kullanım Alanları
Büyük JSON Dosyalarında Yüksek Performans
jq --stream 'select(.[0] | length == 2) | .[1]' buyuk_veri.json
Akış (streaming) modu, devasa dosyaları belleğe yüklemeden işler.
Kubernetes Entegrasyonu
kubectl get pods -o json | jq '.items[] | select(.status.phase == "Running") | {ad: .metadata.name, dugum: .spec.nodeName}'
API Yanıtlarını Filtreleme
curl -s "https://api.rabisu.cloud/veriler" | jq -c '.[] | {ozellik1: .deger1, hedef: .sonuc}' > egitim_verisi.jsonl
💡 Sıkça Sorulan Sorular (SSS)
1. jq, Python veya Node.js’e göre ne zaman avantajlıdır?
Küçük veri filtreleme işlemlerinde, yüksek hız ve düşük bellek kullanımı sağlar. Shell script’lerle doğal olarak entegredir.
2. Eksik alanlarda hata almamak için ne yapmalıyım?
? operatörünü kullan:
jq '.canlilar[]? | .ozellik?' denizCanlilari.json
3. JSON’u CSV’ye dönüştürmek mümkün mü?
Evet, @csv filtresiyle kolayca:
jq -r '.[] | [.ad, .tur, .istridye] | @csv' denizCanlilari.json > canlilar.csv
4. jq ile toplu işlem yapılır mı?
Evet, JSONL dosyalarıyla -c bayrağını kullanabilirsin:
cat log_verisi.jsonl | jq -c 'select(.hata == true)'
🎯 Sonuç
Bu rehberle jq’nun temel ve ileri düzey kullanımını öğrendin:
JSON verilerini filtreleme, toplama ve dönüştürme
YZ/ML ve DevOps iş akışlarında verimlilik artırma
Büyük veri kümelerinde streaming moduyla yüksek performans
💡 Rabisu Cloud altyapında jq’yu hemen deneyerek veri süreçlerini hızlandırabilir, analiz iş akışlarını otomatikleştirebilirsin! ⚙️🚀