3 पॉइंट द्वारा GN⁺ 2023-09-07 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • अब समर्थित नहीं रहे --argfile option और leaf_paths, recurse_down filter हटा दिए गए हैं
  • Docker image अब Docker Hub की जगह ghcr.io/jqlang/jq पर उपलब्ध है
  • रिलीज़ build targets में Linux, macOS, Windows और Docker की कई architectures को स्पष्ट किया गया है
  • --raw-output0 जोड़ा गया है, जिससे outputs के बीच NUL byte डाला जा सकता है, और NUL शामिल करने वाले string output पर error हैंडलिंग होती है
  • Windows पर --binary/-b option जोड़ा गया है, जिससे \r\n की जगह \n line endings आउटपुट किए जा सकते हैं
  • JQ_COLORS से object key colors सेट किए जा सकते हैं, और NO_COLOR environment variable का सम्मान करते हुए color output बंद किया जा सकता है
  • --exit-code/-e option के exit code से जुड़ी समस्या ठीक की गई है: आखिरी output value truthy हो तो 0, false या null हो तो 1, और कोई output न हो तो 4 लौटाया जाता है
  • number literals की precision preservation के लिए decimal number literals का उपयोग किया गया है; comparison operations precision का सम्मान करती हैं, लेकिन arithmetic operations में truncation हो सकता है
  • नए built-in functions pick(stream), debug(msgs), scan($re; $flags), abs जोड़े गए हैं
  • if statement में else branch को छोड़ा जा सकता है, और छोड़ा गया else . व्यवहार की तरह माना जाएगा
  • halt और halt_error अब अगले input पर आगे बढ़ने के बजाय तुरंत terminate करते हैं
  • कुछ platforms पर बड़े numbers की वजह से गलत JSON output बनने की समस्या, libjq और threads के साथ segmentation fault, और --jsonarg के assert crash को ठीक किया गया है
  • CI, scan build, release, और website build अब GitHub Actions का उपयोग करते हैं, और OSS-Fuzz जोड़ा गया है

1 टिप्पणियां

 
GN⁺ 2023-09-07
Hacker News की रायें
  • JQ शानदार है, इसलिए मुझे यह सचमुच पसंद है
    हमने अपने product (JVM और browser-आधारित Kafka tool) में Clojure में JQ का एक subset implement किया, ताकि user data को transform/filter कर सकें। यह मेरे लिखे code में सबसे मज़ेदार कामों में से एक था, और चूंकि मुझे grammar लिखना खुद पसंद है, इसलिए Instaparse का भी बहुत आभार: https://github.com/Engelberg/instaparse
    implement करते समय पता चला कि JQ LISP-2 है, और सिर्फ syntax देखकर ऐसा नहीं लगता था, इसलिए हैरानी हुई: https://github.com/jqlang/jq/wiki/jq-Language-Description#:~...

    • मैं jq को किसी भी तरह पसंद नहीं कर पाता। हमारे work codebase की bash scripts में भी jq बहुत है, और मेरे लिखे code में भी कुछ है; जब वही सबसे अच्छा विकल्प होता है तो अनिच्छा से इस्तेमाल कर लेता हूँ
      लेकिन इसकी non-intuitive query syntax, हर छोटे step पर search करने की ज़रूरत, और फिर result का ऐसा मंत्र जैसा दिखना जिसे jq expert न हो तो समझना मुश्किल है—ये सब खटकता है। htmx या tailwind की तरह strings के अंदर दबे हुए DSLs को लेकर मुझे instinctively resistance होता है
      फिर भी मानता हूँ कि यह अच्छी तरह बनाया गया software है, और कभी-कभी इससे बेहतर विकल्प नहीं होता। JSON को bash में handle करते समय sed/awk/cut वाले monstrosity की तुलना में यह सबसे कम खराब विकल्प भी है। बस scripts के बीच में हमेशा किसी unreadable string की तरह फंसी jq commands, regex की तरह, code में उन चीज़ों में आती हैं जिन्हें मैं देखना नहीं चाहता। alternative के तौर पर मैंने heredoc के अंदर inline Python को pipe करके भी देखा है, लेकिन वह भी jq scripts जितना ही messy हो जाता है
    • ऑनलाइन LALR(1)/FLEX grammar editor/tester में JQ parser/grammar भी जोड़ा है: https://mingodad.github.io/parsertl-playground/playground/
      examples में "Jq parser (partially working)" चुनकर "Parse" दबाएँ, तो "Input source" के source के लिए parser tree देख सकते हैं। feedback हमेशा welcome है
    • JVM के लिए पहले से एक JQ implementation मौजूद है। 100% complete नहीं है, लेकिन usable है: https://github.com/eiiches/jackson-jq
    • jq users को अपना data transform करवाने के लिए बहुत अच्छा है। हम भी मिलती-जुलती approach इस्तेमाल करते हैं: user incoming webhook endpoint बनाते हैं, arbitrary JSON data भेजते हैं, और regression tests व monitoring के साथ useful mappings set करते हैं
      jq ज्यादातर cases को simple बना देता है (असल में JSON dot notation), और long tail वाले complex cases को भी संभव कर देता है
    • अगर product पहले से usable state में है, तो मैं इसे ज़रूर try करना चाहूँगा
  • मुझे jq पसंद है, लेकिन JMESPath (खासकर AWS CLI के साथ), yq (tomlq और xq सहित), और dasel भी इस्तेमाल करता हूँ। hclq का लगभग dead होना अफसोसजनक है
    https://jmespath.org/
    https://kislyuk.github.io/yq/
    https://github.com/TomWright/dasel
    https://hclq.sh/

    • JSON को grep-able बनाइए: https://github.com/tomnomnom/gron
      मैं कई सालों से jq इस्तेमाल कर रहा हूँ और जो चाहिए होता है उसे किसी न किसी तरह compose कर लेता हूँ, लेकिन आज तक यह intuitive नहीं लगा। थोड़ा भी complex होते ही docs को काफी देर पढ़े बिना solution तक पहुँचना मुश्किल है, और काश इसे और आसानी से इस्तेमाल किया जा सकता
    • JMESPath interactive tutorial page सच में बहुत अच्छा है: https://jmespath.org/tutorial.html
      शुरुआत में syntax सीखते समय मदद मिली थी, और आज भी अजीब syntax में अटकने पर फिर वहीं जाता हूँ
    • मैंने कई formats से कई formats में convert करने वाला एक छोटा tool बनाया है
      इसका सबसे बड़ा use case CSV, TOML, XML जैसी चीज़ों को JSON में convert करके jq में pipe करना है: https://github.com/sentriz/rsl
    • alternative के तौर पर ये tools भी हैं
      https://github.com/kellyjonbrazil/jello
      https://github.com/wwkimball/yamlpath
    • एक और शानदार alternative JSONPath है; यह बेहतरीन है, फिर भी support और awareness ज्यादा wide नहीं है, यह अफसोस की बात है
      XPath से inspired होने के कारण यह पूरी तरह नए DSL से ज्यादा familiar लगता है, और मेरे हिसाब से इसका core feature recursive key lookup है। people..address लिखने पर JSON में कहीं भी "people" के नीचे आने वाली हर "address" key ढूँढ देता है। JSON के लिए parsing languages में यह मेरा favorite है, और मैंने JSON datasets parse करने में इसे इस्तेमाल करने का तरीका बताने वाला article भी लिखा है
      https://github.com/JSONPath-Plus/JSONPath
      https://scrapfly.io/blog/parse-json-jsonpath-python/
  • अगर आप jq कभी-कभार ही इस्तेमाल करते हैं और हर बार docs देखने पड़ते हैं, तो gron आज़माने लायक है। यह grep किए जा सकने वाला JSON है
    https://github.com/tomnomnom/gron

    • सरल है, लेकिन बहुत उपयोगी लगता है
      मैं कई सालों से curl cheat.sh/jq इस्तेमाल करता आया हूँ, और मुझे लगता है कि cheat.sh कुल मिलाकर शानदार resource है। आजकल शायद मैं ChatGPT जैसी कोई चीज़ इस्तेमाल करूँगा
    • इसका design सचमुच बहुत अच्छा है
      gron | grep | sed | gron -u जैसा flow भी संभव है
    • jq syntax की वजह से हमेशा जूझता रहा हूँ, लेकिन example JSON देने पर ChatGPT सही command काफ़ी अच्छे से बना देता है—यह देखकर हर बार हैरानी होती है
  • jq को पसंद करने या सहन कर पाने की एक वजह stability है। कई साल पहले लिखी scripts आज भी ठीक वैसी ही चलती हैं
    इसके उलट, yq के लिए रखा code अक्सर टूटता रहा, क्योंकि yq backward-compatible न रहने वाले तरीक़े से लगातार improve होता गया। मैंने यह जांचा नहीं कि ऐसे बदलाव कितनी बार हुए, लेकिन CI scripts जैसी जगहों पर, जहाँ default tool versions अलग-अलग होते हैं और update की रफ़्तार भी अलग होती है, कई बार असर पड़ा
    इसलिए मैं हमेशा jq maintainers का आभारी रहा हूँ कि उन्होंने backward compatibility की अहमियत समझी। उम्मीद है कि यह announcement इस बात का संकेत नहीं है कि वह stability सिर्फ़ ठहराव का संयोगजन्य byproduct थी, और अब ठहराव ठीक करते हुए stability की बलि चढ़ेगी

    • maintainer में से एक के रूप में, मैं पक्का कह सकता हूँ कि हम backward compatibility को बहुत गंभीरता से लेते हैं
    • yq/jq incompatibility के संदर्भ में, jq को wrap करके yq functionality देने वाले काफ़ी projects हैं
      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
    • जिज्ञासा है कि yq का इस्तेमाल कहाँ करते हैं। अगर आप YAML-specific features, जैसे integers·arrays·objects को object keys की तरह इस्तेमाल करने वाली सुविधा, नहीं इस्तेमाल कर रहे हैं, तो YAML को JSON में convert करके pipe करने और फिर jq से process करने का रास्ता ज़्यादा आसान लगता है
    • "backward-compatible न रहने वाले तरीक़े से improvement" असल में "worsening" जैसा सुनाई देता है
  • jq जैसे tools के अलावा, jq के साथ इस्तेमाल होने वाले दिलचस्प tools में jo और jc हैं
    https://github.com/jpmens/jo
    https://github.com/kellyjonbrazil/jc

    • jless और gron भी हैं
      gron के बारे में यहाँ पहली बार सुना, लेकिन completeness के लिए जोड़ रहा हूँ। दूसरी ओर, लगता है JSON CLI tools का standard output format जैसा बनता जा रहा है। Ideal स्थिति यह होगी कि सभी CLI tools --json जैसा flag दें, ताकि jc की ज़रूरत ही न रहे
      https://jless.io/
      https://github.com/tomnomnom/gron
  • पिछले महीने की संबंधित post "First release of jq in 5 years": https://news.ycombinator.com/item?id=36951830
    jq का बड़ा fan हूँ और हमेशा इस्तेमाल करता हूँ

  • आख़िरकार हो गया
    community ने मिलकर नए maintainers recruit किए और project को फिर से ज़िंदा किया—यह process सचमुच शानदार है। खास तौर पर GitHub username के हिसाब से @stedolan, @itchyny, @owenthereal को विशेष धन्यवाद

  • jq और miller मेरे toolbox की essentials हैं, awk और vim के साथ
    https://github.com/johnkerl/miller

  • नया built-in function pick(stream) input object या array का projection emit करने की capability जोड़ता है
    jq -n '{"a": 1, "b": {"c": 2, "d": 3}, "e": 4} | pick(.a, .b.c, .x)'
    यह सचमुच lifesaver जैसा feature है। contributors का धन्यवाद

    • अगर गहराई में जाने की ज़रूरत नहीं है, तो ऐसा भी कर सकते हैं
      $ jq -n '{"a": 1, "b": {"c": 2, "d": 3}, "e": 4} | {a, e}'
      {
      "a": 1,
      "e": 4
      }
    • कुछ दिन पहले यह feature इस्तेमाल करने के लिए Git से install किया था, और यह बहुत उपयोगी है
    • सचमुच शानदार नया feature है। फिलहाल stream को पहले reassemble किए बिना यह संभव नहीं लगता, इसलिए अच्छा होगा अगर streaming data पर भी काम करने वाला pick version हो
  • jaq की भी सिफ़ारिश करना चाहूँगा। यह correctness, speed और simplicity पर focus किया हुआ jq clone है
    यह jq का सिर्फ़ एक subset implement करता है, लेकिन अब तक मैं इसे काफ़ी संतोषजनक ढंग से इस्तेमाल कर रहा हूँ: https://github.com/01mf02/jaq