Rilis jq 1.7
(github.com/jqlang)- Opsi
--argfileyang sempat tidak lagi didukung, serta filterleaf_pathsdanrecurse_down, telah dihapus - Image Docker kini disediakan di
ghcr.io/jqlang/jqalih-alih Docker Hub - Target build rilis kini mencantumkan berbagai arsitektur untuk Linux, macOS, Windows, dan Docker
--raw-output0ditambahkan sehingga byte NUL bisa disisipkan di antara output, dan output string yang mengandung NUL akan diperlakukan sebagai error- Di Windows, opsi
--binary/-bditambahkan sehingga akhir baris dapat dikeluarkan sebagai\nalih-alih\r\n - Warna kunci objek kini dapat diatur dengan
JQ_COLORS, dan output berwarna dinonaktifkan dengan menghormati variabel lingkunganNO_COLOR - Masalah kode keluar pada opsi
--exit-code/-etelah diperbaiki: mengembalikan 0 jika nilai output terakhir bernilai benar, 1 jikafalseataunull, dan 4 jika tidak ada output - Literal angka desimal kini digunakan untuk mempertahankan presisi literal numerik; operasi perbandingan menghormati presisi, tetapi operasi aritmetika masih bisa terpotong
- Fungsi bawaan baru
pick(stream),debug(msgs),scan($re; $flags), danabstelah ditambahkan - Dalam pernyataan
if, cabangelsekini bisa dihilangkan, danelseyang dihilangkan akan diperlakukan sebagai perilaku. haltdanhalt_errorkini segera berhenti tanpa melanjutkan ke input berikutnya- Telah diperbaiki masalah representasi angka besar yang pada beberapa platform menghasilkan output JSON yang salah, error segmentasi saat menggunakan libjq dengan thread, serta crash assert pada
--jsonarg - CI, scan build, rilis, dan build situs web kini menggunakan GitHub Actions, dan OSS-Fuzz telah ditambahkan
1 komentar
Komentar Hacker News
Saya sangat menyukai JQ karena memang hebat
Di produk kami (alat Kafka berbasis JVM dan browser), kami mengimplementasikan subset JQ di Clojure agar pengguna bisa memproses/memfilter data. Itu salah satu pekerjaan paling menyenangkan di antara kode yang pernah saya tulis, dan karena saya memang suka menulis tata bahasa, saya juga sangat berterima kasih kepada Instaparse: https://github.com/Engelberg/instaparse
Saat mengimplementasikannya, saya mengetahui bahwa JQ adalah LISP-2, dan terkejut karena dari sintaksnya saja tidak terasa seperti itu: https://github.com/jqlang/jq/wiki/jq-Language-Description#:~...
Namun saya terganggu oleh sintaks kueri yang tidak intuitif, keharusan mencari-cari untuk setiap langkah yang sangat kecil, dan hasilnya yang tampak seperti mantra yang sulit diuraikan kalau bukan ahli jq. Secara naluriah saya punya penolakan terhadap DSL secara umum yang tertanam di dalam string, seperti htmx atau tailwind
Meski begitu, saya mengakui ini software yang dibuat dengan baik, dan kadang memang tidak ada pilihan yang lebih baik. Saat menangani JSON di bash, ini juga pilihan yang paling tidak buruk dibanding monster sed/awk/cut. Hanya saja perintah jq yang selalu tertancap seperti string tak terbaca di tengah skrip, bersama regex, termasuk hal yang tidak ingin saya lihat di kode. Sebagai alternatif, saya pernah mencoba menyalurkan inline Python di dalam heredoc lewat pipe, tetapi itu juga jadi sama berantakannya dengan skrip jq
Pilih "Jq parser (partially working)" di contoh lalu tekan "Parse" untuk melihat pohon parser bagi source di "Input source". Masukan selalu diterima
jq membuat sebagian besar kasus menjadi sederhana (pada dasarnya notasi titik JSON), sekaligus memungkinkan long tail kasus-kasus yang rumit
Saya suka jq, tetapi juga memakai JMESPath (terutama bersama AWS CLI), yq (termasuk tomlq dan xq), serta dasel. Sayang hclq praktis sudah mati
https://jmespath.org/
https://kislyuk.github.io/yq/
https://github.com/TomWright/dasel
https://hclq.sh/
Saya sudah memakai
jqselama bertahun-tahun dan selalu entah bagaimana bisa merangkai apa yang dibutuhkan, tetapi sampai sekarang belum pernah merasa itu intuitif. Begitu sedikit saja menjadi rumit, sulit mencapai solusi tanpa membaca dokumentasi cukup lama, dan saya berharap ini bisa lebih mudah dipakaiItu membantu saat pertama kali mempelajari sintaksnya, dan sekarang pun kalau tersandung sintaks yang aneh saya kembali membukanya
Kegunaan terbesarnya adalah mengonversi hal-hal seperti CSV, TOML, XML menjadi JSON lalu menyalurkannya ke jq lewat pipe: https://github.com/sentriz/rsl
https://github.com/kellyjonbrazil/jello
https://github.com/wwkimball/yamlpath
Karena terinspirasi dari XPath, ini terasa lebih familiar daripada DSL yang sama sekali baru, dan menurut saya fitur intinya adalah pencarian key rekursif. Jika menulis
people..address, itu akan menemukan semua key "address" di bawah "people" di mana pun dalam JSON. Ini bahasa parsing favorit saya untuk JSON, dan saya juga menulis artikel yang memperkenalkan cara memakainya untuk parsing dataset JSONhttps://github.com/JSONPath-Plus/JSONPath
https://scrapfly.io/blog/parse-json-jsonpath-python/
Jika Anda hanya sesekali memakai jq sehingga setiap kali harus melihat dokumentasi, gron layak dicoba. Ini JSON yang bisa di-grep
https://github.com/tomnomnom/gron
Selama beberapa tahun saya memakai
curl cheat.sh/jq, dan menurut saya cheat.sh secara keseluruhan adalah referensi yang bagus. Kalau sekarang, mungkin saya akan memakai sesuatu seperti ChatGPTPola seperti
gron | grep | sed | gron -ujuga memungkinkanSalah satu alasan saya menyukai jq, atau setidaknya bisa menoleransinya, adalah stabilitas. Skrip yang saya tulis beberapa tahun lalu masih bekerja persis sama sampai sekarang
Sebaliknya, kode yang saya simpan untuk yq sering rusak karena yq terus diperbaiki dengan cara yang tidak kompatibel ke belakang. Saya tidak meneliti seberapa sering perubahan seperti itu terjadi, tetapi berkali-kali terdampak di tempat-tempat seperti skrip CI, yang versi alat bawaannya beragam dan laju pembaruannya juga berbeda-beda
Karena itu saya selalu berterima kasih karena para maintainer jq memahami pentingnya kompatibilitas ke belakang. Semoga pengumuman kali ini bukan berarti stabilitas tersebut selama ini hanya efek samping kebetulan dari stagnasi, lalu stabilitas dikorbankan ketika stagnasi itu diperbaiki
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
Selain alat-alat mirip jq, ada alat menarik yang digunakan bersama jq, yaitu jo dan jc
https://github.com/jpmens/jo
https://github.com/kellyjonbrazil/jc
Saya baru mendengar gron di sini, tetapi menambahkannya demi kelengkapan. Di sisi lain, JSON tampaknya makin menjadi format keluaran standar untuk alat CLI. Idealnya, semua alat CLI menyediakan flag seperti
--jsonsehingga jc tidak lagi diperlukanhttps://jless.io/
https://github.com/tomnomnom/gron
Tulisan terkait bulan lalu, "First release of jq in 5 years": https://news.ycombinator.com/item?id=36951830
Saya penggemar berat jq dan selalu menggunakannya
Akhirnya berhasil
Proses komunitas bekerja sama merekrut maintainer baru dan menghidupkan kembali proyek ini benar-benar keren. Terutama terima kasih khusus kepada @stedolan, @itchyny, dan @owenthereal berdasarkan nama pengguna GitHub
jq dan miller adalah perlengkapan wajib di toolbox saya, bersama awk dan vim
https://github.com/johnkerl/miller
Fungsi bawaan baru
pick(stream)menambahkan kemampuan untuk mengeluarkan proyeksi dari objek atau array inputjq -n '{"a": 1, "b": {"c": 2, "d": 3}, "e": 4} | pick(.a, .b.c, .x)'Ini benar-benar fitur penyelamat. Terima kasih kepada para kontributor
$ jq -n '{"a": 1, "b": {"c": 2, "d": 3}, "e": 4} | {a, e}'{"a": 1,"e": 4}pickyang juga bekerja pada data streamingSaya juga ingin merekomendasikan jaq. Ini klon jq yang berfokus pada akurasi, kecepatan, dan kesederhanaan
Hanya mengimplementasikan subset dari jq, tetapi sejauh ini saya cukup puas memakainya: https://github.com/01mf02/jaq