jq 1.7 sürümü yayınlandı
(github.com/jqlang)- Desteği sonlandırılmış olan
--argfileseçeneği ileleaf_pathsverecurse_downfiltreleri kaldırıldı - Docker imajı artık Docker Hub yerine
ghcr.io/jqlang/jqüzerinden sunuluyor - Sürüm derleme hedefleri arasında Linux, macOS, Windows ve Docker için çeşitli mimariler açıkça belirtildi
--raw-output0eklendi; bu sayede çıktılar arasına NUL baytı konulabiliyor ve NUL içeren dizelerin çıktısı hata olarak işleniyor- Windows'ta
--binary/-bseçeneği eklendi; böylece\r\nyerine\nsatır sonu çıktısı alınabiliyor JQ_COLORSile nesne anahtarı rengi ayarlanabiliyor veNO_COLORortam değişkenine uyularak renkli çıktı devre dışı bırakılıyor--exit-code/-eseçeneğinin çıkış kodu sorunu düzeltildi; son çıktı değeri doğruysa 0,falseveyanullise 1, hiç çıktı yoksa 4 döndürülüyor- Sayı sabitlerinde duyarlılığı korumak için ondalık sayı sabitleri kullanılıyor; karşılaştırma işlemleri bu duyarlılığa uyuyor, ancak aritmetik işlemler kırpılabiliyor
- Yeni yerleşik fonksiyonlar
pick(stream),debug(msgs),scan($re; $flags)veabseklendi ififadesindeelsedalı artık atlanabiliyor; atlananelse,.davranışıyla işleniyorhaltvehalt_error, bir sonraki girdiye devam etmek yerine artık anında sonlandırıyor- Bazı platformlarda büyük sayı gösteriminin hatalı JSON çıktısı üretmesi, libjq ile thread kullanılırken oluşan segmentation fault ve
--jsonargiçin assert çökmesi düzeltildi - CI, scan build, sürüm ve web sitesi derlemeleri GitHub Actions kullanacak şekilde değiştirildi; ayrıca OSS-Fuzz eklendi
1 yorum
Hacker News yorumları
JQ harika olduğu için onu gerçekten seviyorum
Ürünümüzde (JVM ve tarayıcı tabanlı bir Kafka aracı), kullanıcıların verileri işleyip/filtreleyebilmesi için Clojure ile JQ’nun bir alt kümesini uyguladık. Yazdığım kodlar arasında en keyifli işlerden biriydi; zaten sözdizimi yazmayı seven biriyim, bu yüzden Instaparse’e de büyük teşekkürler: https://github.com/Engelberg/instaparse
Uygulama sırasında JQ’nun LISP-2 olduğunu öğrendim; yalnızca sözdizimine bakınca öyle hissettirmediği için şaşırdım: https://github.com/jqlang/jq/wiki/jq-Language-Description#:~...
Ama sezgisel olmayan sorgu sözdizimi, en küçük adımda bile arama yapmak zorunda kalmak ve ortaya çıkan sonucun jq uzmanı olmayanların çözmesi zor bir büyü gibi görünmesi beni rahatsız ediyor. htmx veya tailwind gibi dizgelerin içine gömülü DSL’lere genel olarak içgüdüsel bir mesafem var
Yine de iyi yapılmış bir yazılım olduğunu ve bazen daha iyi bir seçenek olmadığını kabul ediyorum. JSON’u bash içinde işlerken sed/awk/cut canavarından çok daha iyi olması anlamında en az kötü seçenek de bu. Yine de betiğin ortasında, her zaman çözülemez bir dizge gibi duran jq komutları, regex’lerle birlikte kodda görmek istemediğim şeylere yakın. Alternatif olarak heredoc içinde inline Python’ı pipe ile geçirmeyi de denedim ama o da jq betikleri kadar dağınık hale geliyor
Örneklerden "Jq parser (partially working)" seçip "Parse"e basarsanız "Input source" içindeki kaynak için parser ağacını görebilirsiniz. Geri bildirim her zaman memnuniyetle karşılanır
jq çoğu durumu basit hale getiriyor (fiilen JSON nokta notasyonu) ve uzun kuyruktaki karmaşık durumları da mümkün kılıyor
jq’yu seviyorum ama JMESPath’i (özellikle AWS CLI ile birlikte), yq’yu (tomlq ve xq dahil) ve dasel’i de kullanıyorum. hclq’nun fiilen ölü olması üzücü
https://jmespath.org/
https://kislyuk.github.io/yq/
https://github.com/TomWright/dasel
https://hclq.sh/
Yıllardır
jqkullanıyorum ve ihtiyaç duyduğum şeyleri her zaman bir şekilde birleştirip çıkarıyorum, ama hâlâ hiç sezgisel geldiğini hissetmedim. Biraz karmaşıklaşınca belgeleri uzun uzun okumadan çözüme ulaşmak zor; daha kolay kullanılabilse iyi olurduSözdizimini ilk öğrenirken yardımcı olmuştu; şimdi de tuhaf bir sözdizimine takılırsam yine dönüp bakıyorum
En büyük kullanım alanı CSV, TOML, XML gibi şeyleri JSON’a dönüştürüp jq’ya pipe etmek: https://github.com/sentriz/rsl
https://github.com/kellyjonbrazil/jello
https://github.com/wwkimball/yamlpath
XPath’ten ilham aldığı için tamamen yeni bir DSL’e göre daha tanıdık geliyor; temel özelliğinin de özyinelemeli anahtar arama olduğunu düşünüyorum.
people..addressyazdığınızda JSON’un herhangi bir yerinde "people" altında yer alan tüm "address" anahtarlarını bulur. JSON için ayrıştırma dilleri arasında en sevdiğim bu; JSON veri kümelerini ayrıştırmak için nasıl kullanılacağını tanıtan bir yazı da yazdımhttps://github.com/JSONPath-Plus/JSONPath
https://scrapfly.io/blog/parse-json-jsonpath-python/
jq'yu yalnızca ara sıra kullanıyor ve her seferinde belgelere bakmanız gerekiyorsa gron denemeye değer. grep yapılabilir JSON
https://github.com/tomnomnom/gron
Yıllardır
curl cheat.sh/jqkullanıyorum ve cheat.sh'in genel olarak harika bir kaynak olduğunu düşünüyorum. Bugün olsa muhtemelen ChatGPT gibi bir şey kullanırdımgron | grep | sed | gron -ugibi şeyler de mümkünjq'yu sevmemin ya da tolere edebilmemin nedenlerinden biri kararlılığı. Birkaç yıl önce yazdığım betikler bugün de aynı şekilde çalışıyor
Buna karşılık yq için bıraktığım kod, yq geriye dönük uyumsuz biçimde sürekli iyileştirildikçe sık sık bozuldu. Bu tür değişikliklerin ne kadar sık olduğunu araştırmadım ama CI betikleri gibi temel araç sürümlerinin farklı farklı olduğu ve güncelleme hızlarının da değiştiği yerlerde bundan birkaç kez etkilendim
Bu yüzden jq bakımcılarının geriye dönük uyumluluğun önemini anlamasına hep minnettar oldum. Umarım bu duyuru, o kararlılığın yalnızca durgunluğun tesadüfi bir yan ürünü olduğu ve durgunluğu giderirken kararlılığın feda edileceği anlamına gelmiyordur
https://kislyuk.github.io/yq/
https://github.com/kyle-long/yq#yq
https://github.com/up1/yq-1#yq-command-line-yamlxml-processo...
https://github.com/onixspot/yq-2#yq-command-line-yamlxmltoml...
https://github.com/simonrupf/convert2json#convert2json
jq benzeri araçlara ek olarak, jq ile birlikte kullanılan ilginç araçlar arasında jo ve jc var
https://github.com/jpmens/jo
https://github.com/kellyjonbrazil/jc
gron'u burada ilk kez duydum ama bütünlük için ekliyorum. Öte yandan JSON, CLI araçlarının standart çıktı biçimi haline geliyor gibi. İdeal olan, tüm CLI araçlarının
--jsongibi bir bayrak sunması ve böylece jc'ye artık gerek kalmamasıhttps://jless.io/
https://github.com/tomnomnom/gron
Geçen ayki ilgili yazı "First release of jq in 5 years": https://news.ycombinator.com/item?id=36951830
jq'nun ateşli bir hayranıyım ve sürekli kullanıyorum
Sonunda oldu
Topluluğun güçlerini birleştirip yeni bakımcılar bulması ve projeyi yeniden canlandırması gerçekten harika. Özellikle GitHub kullanıcı adlarına göre @stedolan, @itchyny, @owenthereal'e özel teşekkürler
jq ve miller, awk ve vim ile birlikte araç kutumun vazgeçilmezleri
https://github.com/johnkerl/miller
Yeni yerleşik işlev
pick(stream), giriş nesnesinin veya dizisinin bir projeksiyonunu dışa aktarma özelliği ekliyorjq -n '{"a": 1, "b": {"c": 2, "d": 3}, "e": 4} | pick(.a, .b.c, .x)'Bu gerçekten hayat kurtaran bir özellik. Katkıda bulunanlara teşekkürler
$ jq -n '{"a": 1, "b": {"c": 2, "d": 3}, "e": 4} | {a, e}'{"a": 1,"e": 4}picksürümü olsa güzel olurdujaq'ı da önermek isterim. Doğruluk, hız ve sadeliğe odaklanan bir jq klonu
jq'nun yalnızca bir alt kümesini uyguluyor ama şu ana kadar oldukça memnun kalarak kullanıyorum: https://github.com/01mf02/jaq