jq Hile Sayfası: 30 Gerçek Dünya JSON Komut Satırı Deseni
kubectl get pods -o json çıktısını less komutuna boru ile aktarırsınız ve terminal iki megabaytlık bir JSON duvarında donar. Tek istediğiniz, Running aşamasındaki her pod’un adıdır. jq bunu üç karakterlik filtre söz dizimiyle yapar — söz dağarcığını öğrendiğinizde.
Bu bir söz dizimi başvurusu değildir. Gerçekten yazacağınız 30 desendir; başarmaya çalıştığınız göreve göre gruplanmıştır: erişim, filtreleme, dönüştürme, toplama, biçimlendirme ve kubectl, aws, docker gibi gerçek araçlarla birbirine bağlama.
jq’yu Tarayıcı Biçimlendiricisi veya Kod Yerine Ne Zaman Kullanmalı
jq her zaman doğru cevap değildir. Üç dürüst seçenek şöyledir:
| Durum | En iyi araç | Neden |
|---|---|---|
| Tek bir API yanıtı, söz dizimi vurgusu ve hata satır numaraları gerek | Tarayıcı JSON Biçimlendirici | Görsel karşılaştırma, sıfır kurulum, tarayıcıda gizli |
| Shell pipeline, log işleme, CI betiği, uzak sunucu | jq | Birleştirilebilir, betiklenebilir, GUI bağımlılığı yok |
| İş mantığı, birim testleri, karmaşık dallanma | Dil kodu (JS / Python) | Gerçek hata ayıklayıcı, türler, kütüphaneler |
Görev bir shell pipeline içine sığdığında jq’yu seçin — diğer her şey muhtemelen başka yerde daha kolaydır.
Kurulum ve İlk Pipeline’ınız
jq, başlıca tüm platformlarda tek bir ikili dosya olarak gelir:
# macOS
brew install jq
# Debian / Ubuntu
sudo apt install jq
# Windows (winget)
winget install jqlang.jq
Kimlik filtresiyle ilk pipeline:
curl -s https://api.github.com/users/octocat | jq .
. filtresi girdisini alır ve değiştirmeden, pretty-print biçiminde yayar. Bu tek başına “şu JSON’u bir editörde açayım” durumlarının çoğunun yerini alır.
Beş bayrak gerçek kullanımın %90’ını kapsar:
| Bayrak | Amaç |
|---|---|
-r | Ham çıktı — string sonuçlardan çevreleyen tırnakları çıkarır |
-c | Kompakt — satır başına bir JSON değeri (NDJSON) |
-s | Slurp — tüm girdileri tek bir diziye okur |
-R | Ham girdi — satırları JSON yerine string olarak okur |
-n | Null girdi — stdin’i okumaz, girdi olarak null kullanır |
Temel Zihinsel Model: Filtreler ve Borular
Bir filtre, girdi olarak bir JSON değeri alır ve çıktı olarak sıfır veya daha fazla JSON değeri üretir. Filtreler bir boru | ile birleşir; sol filtrenin her çıktısını sağ filtreye girdi olarak gönderir. Bu, byte yerine JSON değerlerinin aktığı, shell borularıyla aynı zihinsel modeldir.
# . — kimlik
echo '{"name":"Alice"}' | jq '.'
# .key — alan erişimi
echo '{"name":"Alice"}' | jq '.name'
# .key.sub — derin yol
echo '{"user":{"email":"a@x.com"}}' | jq '.user.email'
# .[] — dizi öğelerini yinele (birden fazla çıktı üretir)
echo '[{"id":1},{"id":2}]' | jq '.[] | .id'
# Boru bileşimi: .items[] çıktılarının her biri .name filtresine beslenir
echo '{"items":[{"name":"a"},{"name":"b"}]}' | jq '.items[] | .name'
Tüm dilbilgisi budur. Aşağıdaki 30 desen, bu temel yapı taşlarının birleşimleridir.
Gerçekten Kullanacağınız 30 Desen
Her desen girdi JSON’unu, komutu ve çıktıyı gösterir. Herhangi birini terminalinize kopyalayın.
Erişim ve Çıkarma (Desen 1–5)
Desen 1 — ? ile güvenli erişim
Mevcut olmayabilecek bir alana çökmeden erişin:
echo '{"name":"Alice"}' | jq '.address?.city?'
# Çıktı: null
?, eksik anahtarlardaki hataları bastırır. Onsuz, .address yoksa .address.city bir tür hatası verir.
Desen 2 — Derin yol erişimi
echo '{"user":{"profile":{"email":"a@x.com"}}}' | jq '.user.profile.email'
# Çıktı: "a@x.com"
Desen 3 — Dizi dilimleme
echo '[10,20,30,40,50]' | jq '.[1:3]'
# Çıktı: [20, 30]
echo '[10,20,30,40,50]' | jq '.[-1]'
# Çıktı: 50
Negatif indisler sondan sayar. Dilimler, Python gibi yarı açık aralıklar kullanır.
Desen 4 — Eşleşen her anahtarı bulmak için özyinelemeli iniş
echo '{"a":{"name":"x"},"b":[{"name":"y"},{"id":1}]}' | jq '.. | .name? | select(. != null)'
# Çıktı: "x"
# "y"
.., ağaçtaki her değeri gezer. .name? ve select ile birleştirildiğinde, hangi derinlikte olursa olsun her name alanını çıkarır — bilinmeyen JSON şemalarını keşfetmek için paha biçilmezdir.
Desen 5 — Bir nesnenin tüm anahtarlarını listele
echo '{"zebra":1,"apple":2,"mango":3}' | jq 'keys'
# Çıktı: ["apple", "mango", "zebra"]
echo '{"zebra":1,"apple":2,"mango":3}' | jq 'keys_unsorted'
# Çıktı: ["zebra", "apple", "mango"]
keys alfabetik olarak sıralar; keys_unsorted ekleme sırasını korur.
Filtreleme (Desen 6–10)
Desen 6 — Bir diziyi koşula göre filtrele
echo '[{"age":20},{"age":30},{"age":40}]' | jq 'map(select(.age > 25))'
# Çıktı: [{"age":30},{"age":40}]
map(f), f filtresini her öğeye uygular; select(cond) yalnızca koşulun sağlandığı öğeleri tutar.
Desen 7 — String önek eşleştirme
echo '[{"name":"api-gateway"},{"name":"web-ui"},{"name":"api-auth"}]' \
| jq '.[] | select(.name | startswith("api"))'
# Çıktı: {"name":"api-gateway"}
# {"name":"api-auth"}
Diğer yararlı işlevler: endswith("..."), contains("..."), test("^regex$").
Desen 8 — Birleşik koşullar
echo '[{"type":"A","count":5},{"type":"A","count":15},{"type":"B","count":20}]' \
| jq '.[] | select(.type == "A" and .count > 10)'
# Çıktı: {"type":"A","count":15}
and, or, not beklediğiniz gibi çalışır.
Desen 9 — Hassas alanları sil
echo '{"user":"alice","password":"s3cret","token":"abc"}' | jq 'del(.password, .token)'
# Çıktı: {"user":"alice"}
del() birden fazla yol kabul eder ve verilen yollardan biri eksik olsa bile güvenle çalışır.
Desen 10 — Alana göre yinelenenleri ayıkla
echo '[{"id":1,"v":"a"},{"id":2,"v":"b"},{"id":1,"v":"a2"}]' | jq 'unique_by(.id)'
# Çıktı: [{"id":1,"v":"a"},{"id":2,"v":"b"}]
unique tüm değerleri bir bütün olarak karşılaştırarak yinelenenleri ayıklar; unique_by(f) ise bir filtrenin sonucuna göre yinelenenleri ayıklar.
Dönüştürme (Desen 11–15)
Desen 11 — Alanları yeniden adlandır
echo '[{"first_name":"Alice","age":30}]' | jq 'map({name: .first_name, age})'
# Çıktı: [{"name":"Alice","age":30}]
{age} kısaltması, {age: .age} ile eşdeğerdir.
Desen 12 — String içine değer yerleştirerek hesaplanmış alan ekle
echo '[{"first":"Alice","last":"Chen"}]' \
| jq 'map(. + {fullName: "\(.first) \(.last)"})'
# Çıktı: [{"first":"Alice","last":"Chen","fullName":"Alice Chen"}]
\(expr), expr ifadesini değerlendirir ve değerini string’in içine yerleştirir.
Desen 13 — İç içe dizileri düzleştir
echo '[{"tags":["a","b"]},{"tags":["c"]}]' | jq '[.[] | .tags[]]'
# Çıktı: ["a","b","c"]
echo '[[1,2],[3,[4,5]]]' | jq 'flatten'
# Çıktı: [1,2,3,4,5]
flatten isteğe bağlı bir derinlik argümanı alır: flatten(1) yalnızca tek bir seviyeyi düzleştirir.
Desen 14 — Nesneden diziye ve geriye
echo '{"a":1,"b":2}' | jq 'to_entries'
# Çıktı: [{"key":"a","value":1},{"key":"b","value":2}]
echo '[{"key":"a","value":1},{"key":"b","value":2}]' | jq 'from_entries'
# Çıktı: {"a":1,"b":2}
Bu ikili, nesne anahtarları üzerinde yineleme gerektiren dönüşümleri mümkün kılar — nokta-yol söz diziminin doğrudan yapamayacağı bir şey.
Desen 15 — İki nesneyi derin birleştir
echo '{"a":{"x":1},"b":2}' | jq '. * {a:{y:9}, c:3}'
# Çıktı: {"a":{"x":1,"y":9},"b":2,"c":3}
* operatörü derin birleştirme yapar. Yüzeysel birleştirme için + kullanın (sağ taraf kazanır).
Toplama (Desen 16–20)
Desen 16 — Dizilerin, nesnelerin ve string’lerin uzunluğu
echo '[1,2,3,4]' | jq 'length' # 4
echo '{"a":1,"b":2}' | jq 'length' # 2
echo '"hello"' | jq 'length' # 5
Desen 17 — Bir alanı topla
echo '[{"price":10},{"price":25},{"price":5}]' | jq '[.[].price] | add'
# Çıktı: 40
add, girdi türüne göre sayıları toplar, string’leri birleştirir veya dizileri tek bir diziye birleştirir.
Desen 18 — Alana göre grupla
echo '[{"cat":"A","n":1},{"cat":"B","n":2},{"cat":"A","n":3}]' | jq 'group_by(.cat)'
# Çıktı: [[{"cat":"A","n":1},{"cat":"A","n":3}],[{"cat":"B","n":2}]]
Her grup ayrı bir iç dizi olur. Grup başına toplama yapmak için map ile birleştirin.
Desen 19 — Azalan sırada sırala
echo '[{"date":"2026-01-03"},{"date":"2026-01-01"},{"date":"2026-01-02"}]' \
| jq 'sort_by(.date) | reverse'
# Çıktı: [{"date":"2026-01-03"},{"date":"2026-01-02"},{"date":"2026-01-01"}]
ISO 8601 tarih string’leri, string olarak da doğru biçimde sıralanır. Diğer biçimler için önce ayrıştırma yapın — Unix zaman damgası rehberi epoch saniye, milisaniye ve saat dilimi dönüşümünü ayrıntılı biçimde ele alır.
Desen 20 — Bir alana göre maks veya min
echo '[{"name":"a","rating":4.1},{"name":"b","rating":4.8},{"name":"c","rating":3.9}]' \
| jq 'max_by(.rating)'
# Çıktı: {"name":"b","rating":4.8}
min_by ve max_by tek bir öğe döndürür. İlk N öğe için sort_by(.rating) | reverse | .[:N] kullanın.
Çıktı Biçimlendirme (Desen 21–25)
Desen 21 — CSV çıktısı
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' \
| jq -r '.[] | [.name, .age] | @csv'
# Çıktı: "Alice",30
# "Bob",25
@csv string’leri tırnak içine alır ve içlerindeki tırnakları kaçış karakteriyle korur. -r, dış JSON string tırnaklarını kaldırır, böylece CSV doğrudan boruya verilebilir. Sonradan tekrar JSON’a dönüştürmeniz gerekirse, JSON5 ve JSONC biçimlendirme rehberi yorum/sondaki virgül uzantılarını ele alır — jq katı RFC 8259’a uyduğu için bu uzantıları önce temizlemeniz gerekir.
Desen 22 — TSV çıktısı
echo '[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]' \
| jq -r '.[] | [.id, .name] | @tsv'
# Çıktı: 1 Alice
# 2 Bob
Sekmeyle ayrılmış çıktı, cut, awk ve column -t ile iyi uyum sağlar.
Desen 23 — Ham string çıktısı
echo '["alpha","beta"]' | jq -r '.[]'
# Çıktı: alpha
# beta
-r olmadan her satır çevreleyen tırnaklarla gelir. xargs, while read veya başka bir shell komutuna beslemek istediğinizde ham çıktı tam ihtiyacınız olan şeydir.
Desen 24 — NDJSON / JSON Lines
echo '[{"a":1},{"a":2}]' | jq -c '.[]'
# Çıktı: {"a":1}
# {"a":2}
Her satır bağımsız bir JSON değeridir — Kafka, Elasticsearch ve çoğu yapılandırılmış logger tarafından kullanılan biçimdir. -c ayrıca tüm iç boşlukları kaldırır.
Desen 25 — Biçimlendirilmiş çıktı için string içine değer yerleştirme
echo '[{"name":"server-1","cpu":0.73},{"name":"server-2","cpu":0.21}]' \
| jq -r '.[] | "\(.name): \(.cpu * 100)% CPU"'
# Çıktı: server-1: 73% CPU
# server-2: 21% CPU
Ham JSON’un gereksiz gürültü olacağı özetler ve log satırları için idealdir.
Sahada DevOps (Desen 26–30)
Desen 26 — kubectl: çalışan her pod’un adı
kubectl get pods -o json \
| jq -r '.items[] | select(.status.phase=="Running") | .metadata.name'
Pipeline: pod’ları gez, yalnızca Running durumda olanları tut, adı ham string olarak yay.
Desen 27 — AWS EC2: genel IP’si olan instance kimlikleri
aws ec2 describe-instances \
| jq -r '.Reservations[].Instances[] | [.InstanceId, .PublicIpAddress // "none"] | @tsv'
// alternatif operatörü, alan null olduğunda bir yedek değer sağlar — çıktı sütununda yazılı null görünmesini önler.
Desen 28 — GitHub API: sayfalanmış sonuçları birleştir
for p in 1 2 3; do
curl -s "https://api.github.com/orgs/myorg/repos?per_page=100&page=$p"
done | jq -s 'add | map(.name)'
-s tüm yanıtları tek bir diziler dizisine slurp eder, add onları birleştirir, ardından map(.name) adları çıkarır. Sayfalanmış herhangi bir API için yaygın bir desen.
Desen 29 — Yapılandırılmış log dosyalarını filtrele
cat app.log | jq -c 'select(.level=="error")'
Log dosyasının NDJSON olduğunu varsayar (satır başına bir JSON nesnesi). Canlı izleme için tail -f ile eşleştirin:
tail -f app.log | jq -c 'select(.level=="error") | {ts: .timestamp, msg: .message}'
Desen 30 — Docker: kullanımdaki tüm imaj adları
docker inspect $(docker ps -q) | jq -r '.[].Config.Image' | sort -u
Bir host üzerinde hangi imaj sürümlerinin çalıştığını hızlıca denetlemek için kullanışlıdır.
Yaygın Hatalar ve Nasıl Düzeltilir
Her jq kullanıcısı bunlarla karşılaşır. Düzeltmeyi önceden bilmek saatleri kurtarır.
Cannot iterate over null (null)
Yinelemeye çalıştığınız girdi alanı null ya da eksikti. İki düzeltme yolu:
# Seçenek A: opsiyonel operatör
echo '{}' | jq '.items[]?'
# Çıktı: (hiçbir şey, hata yok)
# Seçenek B: varsayılanla alternatif operatör
echo '{}' | jq '(.items // [])[]'
# Çıktı: (hiçbir şey, hata yok)
Sessizce atlamak istediğinizde ? kullanın. Aşağı akış filtrelerinin yine de çalışabilmesi için somut bir boş diziye zorlamak istediğinizde // [] kullanın.
Cannot index array with "key"
.foo yazdınız ancak mevcut değer bir dizi. Üzerinde gezmek için [] ekleyin:
# Yanlış
echo '{"users":[{"name":"Alice"}]}' | jq '.users.name'
# Hata: Cannot index array with "name"
# Doğru
echo '{"users":[{"name":"Alice"}]}' | jq '.users[].name'
# Çıktı: "Alice"
Shell tırnaklama sorunu
Tüm jq programını tek tırnak içine alın; içerideki string sabitleri için çift tırnak kullanın:
# Her yerde çalışır
jq '.users[] | select(.role == "admin")'
# Bozulur — çift tırnaklar önce shell tarafından yorumlanır
jq ".users[] | select(.role == \"admin\")"
Windows PowerShell uç durumları
PowerShell tek tırnakları aynı şekilde değerlendirmez. Programın etrafında çift tırnak tercih edin ve iç tırnakları kaçış karakteriyle koruyun ya da bir here-string kullanın:
jq "@'
.users[] | select(.role == \"admin\")
'@"
Önemsiz olmayan her durumda, filtreyi bir .jq dosyasına kaydedip jq -f filter.jq komutuyla çalıştırın.
Ham çıktının yanlış kullanımı
-r yalnızca string sonuçlarını etkiler. Girdi bir nesneyse normal bir JSON nesnesi üretir:
echo '{"a":1}' | jq -r '.'
# Çıktı: {"a":1} ← değişmedi; -r kaldıracak bir tırnak bulamadı
Belirli bir alanı tırnaksız istiyorsanız önce o alanı seçin: jq -r '.a'.
jq, yorum veya son virgül içeren JSON’u reddeder
echo '{"a": 1, /* note */ "b": 2,}' | jq .
# parse error: Invalid numeric literal
jq, katı RFC 8259 JSON’a uyar — yorum yok, son virgül yok, tırnaksız anahtar yok. Dosya JSON5 veya JSONC ise (yapılandırma dosyalarında yaygın), önce bu uzantıları temizleyin. JSON5 ve JSONC biçimlendirme rehberi, hangi ayrıştırıcıların bunları desteklediğini ve jq’ya borulamadan önce nasıl katı JSON’a dönüştürüleceğini ele alır.
jq ve Alternatifleri: gron, fx, jj, yq
jq tek seçenek değildir ve bazen farklı bir araç daha hızlıdır:
| Araç | Güçlü yönü | Ne zaman başvurulur |
|---|---|---|
| gron | JSON’u grep ile aranabilir yollara düzleştirir | Bilinmeyen şemaları keşfederken — anahtarın nerede olduğunu bilmediğinizde |
| fx | Vurgulamalı etkileşimli TUI gezgini | Büyük JSON’u elle gezerken |
| jj | jq’dan çok daha hızlı, sınırlı söz dizimi | Milyonlarca kayıt işleyen kritik kod yollarında |
| yq | YAML için aynı filtre dili | Kubernetes manifest’leri ve CI yapılandırması |
| Tarayıcı JSON Biçimlendirici | Söz dizimi vurgusu, kesin hata mesajları, sıfır kurulum | Geliştirme sırasında tek bir yanıtın hata ayıklamasında |
Günlük shell çalışması için jq, birleştirilebilirlik açısından öne çıkar. Tek seferlik keşif için gron genellikle daha hızlıdır. YAML için yq kullanın — yq çıktısını tekrar jq’ya borulamaya çalışmayın.
Günlük Kullanım için Profesyonel İpuçları
jq’yu doğal bir araç gibi kullanmanızı sağlayan birkaç alışkanlık:
-
$HOMEiçinde bir.jqrctutun. Yardımcı işlevleri oraya ekleyin; bunlar herjqçağrısında kullanılabilir olur:def running: select(.status.phase == "Running"); def table(f): [f] | @tsv; -
Karmaşık filtreler için jqplay.org’u kullanın. JSON’unuzu sol tarafa yapıştırın, filtreyi sağda deneyerek geliştirin, çalışan sürümü betiğinize taşıyın.
-
history’den kendi hile sayfanızı oluşturun.history | grep 'jq ' | sort -u > ~/jq-patterns.txt, gerçekten kullandığınız her deseni yakalar. -
Bilinmeyen şemalar için tarayıcı JSON Biçimlendiricisi ile birleştirin. İhtiyacınız olan yolu bulmak için yapıyı önce görsel olarak keşfedin, ardından
jqkomutunu yazın. -
Canlı değerleri izleyin:
watch -n 5 "curl -s api.example.com/health | jq '.uptime'"her 5 saniyede bir yeniler — bağımlılık gerektirmeyen, hızlı bir ops gösterge paneli.
SSS
jq nedir ve geliştiriciler neden kullanır?
jq bir komut satırı JSON işlemcisidir. Python veya Node betiği gerektirmeden shell pipeline’ları içinde JSON’u çıkarır, filtreler ve dönüştürür — API yanıtlarından, log dosyalarından veya kubectl çıktısından gerçekten istediğiniz alana ulaşmanın en hızlı yoludur.
jq Windows’ta kullanılabilir mi?
Evet. winget install jqlang.jq, Chocolatey choco install jq ile kurun veya ikili dosyayı jqlang.org’dan indirin. PowerShell tırnaklama kuralları bash’ten farklıdır — şüpheniz olduğunda, filtreleri bir .jq dosyasına kaydedin ve jq -f filter.jq komutunu çalıştırın.
jq, tarayıcı JSON biçimlendiricisinden nasıl farklıdır?
Tarayıcı JSON Biçimlendiricisi etkileşimlidir — JSON’u yapıştırın, vurgulamayı ve hataları görün, sonucu kopyalayın. jq etkileşimli değildir — dönüşümü bir kez tanımlayın, bir shell pipeline içinde çalıştırın. Tek bir yanıtın hata ayıklamasında tarayıcıyı kullanın; aynı işlemi yüzlerce yanıt üzerinde otomatikleştirmek için jq’ya başvurun.
jq neden “Cannot iterate over null” diyor?
null olan bir değer üzerinde yineleme (.[]) yapmaya çalıştınız — genellikle alan girdide bulunmadığı için. Opsiyonel operatör .items[]? ile düzeltin veya .items // [] | .[] ile bir varsayılan değer sağlayın.
jq dosyaları yerinde değiştirebilir mi?
Doğrudan değil — jq stdout’a yazar. Bir geçici dosya veya moreutils’ten sponge kullanın: jq '.version = "2.0"' config.json | sponge config.json. Orijinali her zaman önceden yedekleyin; yanlış yazılmış bir filtre dosyanın üzerine yazar.
jq’yu curl yanıtlarıyla nasıl kullanırım?
curl -s’yi jq’ya borulayın. -s bayrağı curl’un ilerleme göstergesini susturur, böylece yalnızca JSON gövdesi jq’ya ulaşır:
curl -s https://api.github.com/users/octocat | jq '.name, .blog'
jq’nun | operatörü ile shell | arasındaki fark nedir?
Shell borusu, süreçler arasında byte gönderir. jq’nun borusu ise tek bir jq çağrısı içinde filtreler arasında JSON değerleri gönderir. İçinde birçok boru bulunan tek bir jq komutu tek bir süreçte çalışır — jq | jq | jq zincirlemesinden daha ucuzdur.
jq, JSON Lines (NDJSON) işleyebilir mi?
Evet, dahili olarak. jq, boşlukla ayrıldıklarında her satırı bağımsız bir JSON değeri olarak okur. NDJSON yaymak için -c ve NDJSON’u tek bir diziye toplamak için -s kullanın.
Filtreleme yapmadan JSON’u nasıl pretty-print yaparım?
Kimlik filtresini kullanın: cat data.json | jq . veya doğrudan jq . < data.json. Ayrıştırır, doğrular ve iki boşluklu girintiyle pretty-print yapar — filtre yazmanıza gerek kalmaz.
GUI’li bir jq alternatifi var mı?
Evet. fx, etkileşimli bir TUI sunar. Sıfır kurulumlu bir GUI için tarayıcı tabanlı JSON Biçimlendirici, keşfetme ve doğrulama ihtiyaçlarının çoğunu karşılar. jqplay.org gibi web araçları ise jq’nun kendisini canlı önizleme ile sunar.
Python betiği yazmak yerine ne zaman jq kullanmalıyım?
Görev tek seferlikse, bir shell pipeline’a sığıyorsa ve filtreleme, dönüştürme ve çıkarma kapsamında kalıyorsa jq’ya başvurun. Birim testlerine, karmaşık duruma, üçüncü taraf kütüphanelere veya bir .jq dosyasının okunabilir biçimde barındıramayacağı dallanma mantığına ihtiyacınız olduğunda Python’a geçin.
jq’da düzenli ifadeleri nasıl kullanırım?
jq, regex’i test("pattern"), match("pattern"), capture("pattern") ve scan("pattern") aracılığıyla sunar; hepsi PCRE söz dizimini kullanır. Bayrakları ikinci bir argüman olarak iletin: büyük/küçük harf duyarsız eşleme için test("abc"; "i"). match, ofsetleri ve yakalamaları döndürür; scan, çakışmayan her eşleşmeyi yayar.
Temel Noktalar
- Önce zihinsel model: filtre girdi olarak girer, sıfır veya daha fazla JSON değeri çıktı verir,
|ile birleştirilir. Geri kalanı söz dizimidir. - Operatöre göre değil, göreve göre öğrenin: yukarıdaki 30 desen, günlük
jqkullanımının yaklaşık %95’ini kapsar. nulldurumunu açıkça ele alın: sessiz atlama için?, somut yedek için// default.Cannot iterate over nulldüzeltmelerinin çoğu bu ikisinden biridir.jq’nun ne zaman yanlış araç olduğunu bilin: tek bir yanıt için tarayıcı JSON Biçimlendiricisi uygundur; YAML içinyquygundur; karmaşık mantık gerçek bir programlama diline aittir.- Mevcut yığınınızla eşleştirin:
jq,curl,kubectl,aws,dockerve log pipeline’ları içinde parlar. Mantık katmanı olarak değil, tutkal olarak kullanın.
İlgili JSON iş akışları için, yapılandırma dosyası söz dizimi uzantıları konusunda JSON5 ve JSONC biçimlendirme rehberine bakın. JSON’unuz zaman damgaları içerdiğinde, Unix zaman damgası rehberi tarih alanlarını dönüştürürken karşılaşacağınız tuzakları ele alır. Sonuçları paylaşmadan önce hassas alanları kodlamak için Base64 ileri düzey rehberimize bakın.