3 पॉइंट द्वारा GN⁺ 2023-11-30 | 1 टिप्पणियां | WhatsApp पर शेयर करें

jaq का परिचय

  • jaq JSON डेटा प्रोसेसिंग टूल jq का एक क्लोन है, जिसका लक्ष्य jq के सिंटैक्स और ऑपरेशन्स के बड़े हिस्से को सपोर्ट करना है.
  • jaq के तीन मुख्य लक्ष्य सटीकता, परफ़ॉर्मेंस, और सरलता हैं.
  • यह jq के साथ कम्पैटिबिलिटी बनाए रखते हुए अधिक सटीक और पूर्वानुमानित इम्प्लीमेंटेशन देने की कोशिश करता है.
  • jq के अप्रत्याशित व्यवहार के उदाहरणों में nan > nan का false होना और nan < nan का true होना, तथा jq में [[[]] | implode चलाने पर crash होना शामिल है.
  • इसे jq के लंबे startup time की समस्या के समाधान के रूप में विकसित किया गया था, और इसका startup time jq 1.6 की तुलना में लगभग 30 गुना तेज़ है.
  • jaq का लक्ष्य एक सरल और छोटा इम्प्लीमेंटेशन रखना है ताकि bugs की संभावना कम हो और योगदान देना आसान बने.

इंस्टॉलेशन

source से इंस्टॉल करना

  • jaq को compile करने के लिए Rust toolchain की आवश्यकता होती है.
  • Linux distributions में शामिल Rust compiler पुराना हो सकता है और jaq को compile करने के लिए उपयुक्त न हो.
  • cargo install --locked jaq या cargo install --locked --git https://github.com/01mf02/jaq कमांड के जरिए jaq को इंस्टॉल किया जा सकता है.
  • Rust द्वारा सपोर्ट किए जाने वाले सभी systems पर jaq को काम करना चाहिए, और यदि ऐसा न हो तो issue दर्ज किया जाना चाहिए.

binary इंस्टॉलेशन

  • macOS या Linux पर homebrew का उपयोग करके jaq को इंस्टॉल किया जा सकता है.

उदाहरण

  • नीचे दिए गए उदाहरण दिखाते हैं कि jaq अभी क्या-क्या कर सकता है.
  • echo '{"a": 1, "b": 2}' | jaq '.a' चलाने पर 1 आउटपुट होता है.
  • echo '{"a": 1, "b": 2}' | jaq 'add' चलाने पर 3 आउटपुट होता है.
  • echo '[0, 1, 2, 3]' | jaq 'map(.*2) | [.[] | select(. < 5)]' चलाने पर [0, 2, 4] आउटपुट होता है.

परफ़ॉर्मेंस

  • कई benchmarks के जरिए jaq, jq, और gojq की परफ़ॉर्मेंस की तुलना की गई है.
  • empty benchmark का उपयोग startup time मापने के लिए किया जाता है.
  • bf-fib benchmark में jq में लिखा गया Brainfuck interpreter, Fibonacci numbers बनाने वाली Brainfuck script को चलाता है.
  • अन्य benchmarks विभिन्न filters को n input values के साथ evaluate करते हैं.
  • benchmark परिणाम दिखाते हैं कि jaq-1.2, 16 benchmarks में सबसे तेज़ है, jq-1.7, 2 में, और gojq-0.12.13, 1 में सबसे तेज़ है.

फीचर्स

मूल फीचर्स

  • यह basic data types, conditionals, access, operators, error handling, string interpolation, format strings आदि जैसे कई मूल फीचर्स को सपोर्ट करता है.

paths

  • यह array/object indexing, iteration, optional indexing/iteration, array slices, string slices आदि को सपोर्ट करता है.

operators

  • यह composition, binding, concatenation, assignment, update assignment, alternatives, logic, equality और comparison, arithmetic, negation, तथा error suppression जैसे operators को सपोर्ट करता है.

definitions

  • यह basic definitions और recursive definitions को सपोर्ट करता है.

core filters

  • यह कई core filters को सपोर्ट करता है.

standard filters

  • standard filters को अधिक बुनियादी filters के माध्यम से परिभाषित किया जाता है.

numeric filters

  • यह libm से लिए गए कई filters को सपोर्ट करता है.

उन्नत फीचर्स

  • jq की कुछ सुविधाएँ सपोर्ट नहीं की जातीं, जैसे modules, SQL-style operators, streaming आदि.

jq और jaq के बीच अंतर

numbers

  • jq जहाँ सभी numbers को 64-bit floating point के रूप में उपयोग करता है, वहीं jaq integers और floating point numbers के बीच अंतर करता है.

NaN और infinity

  • jaq, IEEE 754 floating point arithmetic standard के अधिक करीब व्यवहार प्रदान करता है.

fractional numbers का संरक्षण

  • jaq, JSON डेटा से आने वाले fractional numbers को पूरी तरह सुरक्षित रखता है.

assignment

  • jaq, assignment को jq से अलग तरीके से interpret करता है.

definitions

  • jaq, filter definitions की अनुमति देता है, और jq की तरह arguments को values के रूप में पास किया जा सकता है.

arguments

  • jaq, command line के जरिए arguments को define करने की अनुमति देता है.

folding

  • jaq, reduce और foreach filters प्रदान करता है और jq से अलग interpretation देता है.

error handling

  • jaq, jq से अलग error handling mechanism का उपयोग करता है.

अन्य

  • slurping, Cartesian product, list updates, input reading, joins आदि में jq और jaq अलग व्यवहार दिखाते हैं.

योगदान

  • jaq में योगदान का स्वागत है, और बदलाव के बाद यह सुनिश्चित करना चाहिए कि cargo test सफलतापूर्वक चलता है.

आभार

  • jaq को कई libraries और Rust standard library से बड़ा लाभ मिला है.

GN⁺ की राय

इस लेख की सबसे महत्वपूर्ण बात यह है कि jaq, jq की अधिकांश क्षमताओं को सपोर्ट करते हुए भी परफ़ॉर्मेंस और सटीकता को बेहतर बनाने की कोशिश करता है. खास तौर पर, jq की तुलना में इसका startup time काफी तेज़ है और अप्रत्याशित व्यवहार को कम करने पर इसका ध्यान कई उपयोगकर्ताओं के लिए दिलचस्प हो सकता है. साथ ही, Rust-आधारित होने के कारण इसे memory safety और परफ़ॉर्मेंस दोनों के लिहाज़ से भी फायदे मिलते हैं. इन सुधारों के कारण JSON डेटा प्रोसेसिंग की ज़रूरत वाले software engineers के लिए यह एक उपयोगी टूल बन सकता है.

1 टिप्पणियां

 
GN⁺ 2023-11-30
Hacker News राय
  • [[[]] | implode बग और jq डेवलपमेंट का रुकना

    • jq का डेवलपमेंट 5 साल तक रुका रहा था और हाल ही में फिर शुरू हुआ है, इसलिए लंबे समय से ज्ञात बग्स ठीक नहीं हुए थे। अब डेवलपमेंट फिर शुरू होने से उम्मीद है कि धीरे-धीरे जमा हुई समस्याएँ हल होंगी.
  • दूसरे प्रोजेक्ट्स की सिफारिश के लिए धन्यवाद

    • जब कोई प्रोजेक्ट दूसरे समान या प्रेरणा देने वाले प्रोजेक्ट्स की सिफारिश करता है तो अच्छा लगता है। खासकर jql प्रोजेक्ट के बारे में जानकर खुशी हुई.
  • nan > nan और nan < nan की तुलना के परिणाम पर सवाल

    • यह सवाल उठाया गया कि jq में nan > nan false और nan < nan true होना क्या IEEE 754 floating-point standard का सही पालन है, या यह एक बग है.
  • jq के uint64 नंबर दिखाने की समस्या

    • jq द्वारा uint64 नंबरों को सही तरह से प्रदर्शित न कर पाने पर असंतोष जताया गया.
  • jq की जगह DuckDB इस्तेमाल करने का अनुभव

    • jq शक्तिशाली है, लेकिन जब डेटा tabular form में हो तो SQL का इस्तेमाल अधिक प्राकृतिक लगता है, ऐसा अनुभव साझा किया गया.
  • jaq में बहुत सारी dependencies होने की ओर इशारा

    • jaq प्रोजेक्ट में dependencies ज़्यादा होने की बात उठाई गई.
  • jq के उपयोग के तरीके पर सवाल

    • यह पूछा गया कि jq का उपयोग development/data analysis के दौरान JSON files को explore करने के लिए किया जाता है, या production environment में चलने वाले programs में भी किया जाता है.
  • jq की जगह yq इस्तेमाल करने का अनुभव

    • jq की जगह yq का उपयोग शुरू करने का अनुभव साझा किया गया, और दोनों tools के बीच मुख्य अंतर पर राय का आदान-प्रदान हुआ.
  • PowerShell में डेटा query करने का तरीका

    • PowerShell का उपयोग करने पर jq, xmlstarlet जैसे अलग-अलग tools की syntax सीखने की ज़रूरत नहीं पड़ती, क्योंकि यह सभी डेटा को objects में बदलकर PowerShell syntax से query करने देता है.
  • jq की syntax और documentation की जटिलता पर राय

    • jq की syntax और documentation को समझना कठिन लगता है, और यह भी राय दी गई कि नए version में भी यह हिस्सा बेहतर नहीं हुआ। यह संकेत भी दिया गया कि कभी-कभी खुद लिखना बेहतर हो सकता है.