3 पॉइंट द्वारा GN⁺ 2024-03-20 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • jnv JSON को एक्सप्लोर करने के लिए बनाया गया एक टूल है, जो एक इंटरैक्टिव JSON viewer और jq फ़िल्टर एडिटर साथ में देता है
  • फ़िल्टर लागू करने के लिए यह jaq का उपयोग करता है, इसलिए यूज़र को अलग से jq तैयार करने की ज़रूरत नहीं होती
  • इनपुट के रूप में फ़ाइल और stdin दोनों समर्थित हैं, और यह single JSON के साथ-साथ JSON Lines जैसी कई JSON संरचनाओं को भी संभाल सकता है जिन्हें StreamDeserializer से deserialize किया जा सके
  • TOML सेटिंग्स के ज़रिए hint display, UI responsiveness, editor behavior, JSON viewer style, autocomplete display और behavior, तथा key bindings को समायोजित किया जा सकता है
  • autocomplete jq की केवल Identity, Object Identifier-Index, और Array Index सुविधाओं को सपोर्ट करता है, और v0.7.0 में TOML configuration syntax बदल गई है, लेकिन migration tool उपलब्ध नहीं है

jnv की प्रमुख सुविधाएँ

  • jnv JSON को एक्सप्लोर करने के लिए एक इंटरैक्टिव टूल है, जो JSON viewer और jq फ़िल्टर एडिटर प्रदान करता है
  • JSON पर syntax highlighting लागू की जा सकती है
  • jq फ़िल्टर लागू करने के लिए jaq का उपयोग किया जाता है
    • यूज़र को खुद jq तैयार करने की आवश्यकता नहीं होती
  • यह jid और jiq से प्रेरित है

इनपुट फ़ॉर्मैट और फ़िल्टर एडिटिंग

  • इनपुट फ़ाइल या stdin से लिया जा सकता है
  • डेटा single JSON या कई JSON संरचनाओं के रूप में हो सकता है
    • कई JSON संरचनाएँ ऐसे फ़ॉर्मैट में होनी चाहिए जिन्हें StreamDeserializer से deserialize किया जा सके
    • उदाहरण के रूप में JSON Lines शामिल है
  • फ़िल्टर autocomplete सीमित रूप से समर्थित है
  • फ़िल्टर evaluation में मदद के लिए hint messages दिखाए जा सकते हैं

इंस्टॉलेशन के तरीके

  • Homebrew से इंस्टॉल किया जा सकता है
    • brew install jnv
    • या brew install ynqa/tap/jnv
  • MacPorts से इंस्टॉल किया जा सकता है
    • sudo port install jnv
  • Nix / NixOS पर उपयोग किया जा सकता है
    • nix-shell -p jnv
  • conda-forge के ज़रिए इंस्टॉल या रन किया जा सकता है
    • pixi global install jnv
    • cat data.json | pixi exec jnv
    • conda install jnv
  • Docker के लिए इमेज खुद build करके चलाने का उदाहरण दिया गया है
    • बताया गया है कि इमेज निकट भविष्य में किसी registry पर उपलब्ध कराई जाएगी
  • Cargo से इंस्टॉल किया जा सकता है
    • cargo install jnv

उपयोग उदाहरण और CLI विकल्प

  • इसे फ़ाइल या standard input के साथ चलाया जा सकता है
    • cat data.json | jnv
    • jnv data.json
  • UNIX वातावरण में बाहर निकलते समय मौजूदा result को stdout में लिखा जा सकता है
    • cat data.json | jnv --write-to-stdout | some-command
    • cat data.json | jnv -- --write-to-stdout > result.json
  • मूल उपयोग फ़ॉर्म jnv [OPTIONS] [INPUT] है
  • [INPUT] एक वैकल्पिक JSON फ़ाइल path है
    • अगर इसे निर्दिष्ट न किया जाए या - दिया जाए, तो standard input से पढ़ा जाएगा
  • मुख्य विकल्प इस प्रकार हैं
    • -c, --config <CONFIG_FILE>: configuration फ़ाइल path निर्दिष्ट करें
    • --default-filter <DEFAULT_FILTER>: इनपुट डेटा पर लागू करने के लिए डिफ़ॉल्ट jq फ़िल्टर निर्दिष्ट करें
    • --write-to-stdout: बाहर निकलते समय मौजूदा JSON result को stdout में आउटपुट करें
    • -h, --help: help आउटपुट करें
    • -V, --version: version आउटपुट करें

कुंजी संचालन

  • सामान्य key bindings एडिटर और JSON viewer दोनों में बुनियादी व्यवहार प्रदान करते हैं
    • Ctrl + C: बाहर निकलें
    • Ctrl + Q: jq फ़िल्टर को clipboard में कॉपी करें
    • Ctrl + O: JSON को clipboard में कॉपी करें
    • Shift + ↑, Shift + ↓: दूसरे mode में स्विच करें
  • Editor mode डिफ़ॉल्ट mode है
    • Tab: सुझाया गया इनपुट दर्ज करें
    • , : cursor को बाएँ-दाएँ ले जाएँ
    • Ctrl + A, Ctrl + E: लाइन की शुरुआत और अंत में जाएँ
    • Backspace: cursor से पहले का character हटाएँ
    • Ctrl + U: पूरी लाइन हटाएँ
    • Alt + B, Alt + F: ., |, (, ), [, ] में से निकटतम character के आधार पर पिछली या अगली स्थिति पर जाएँ
    • Ctrl + W, Alt + D: उसी character set के आधार पर पिछली या अगली स्थिति तक delete करें
  • autocomplete suggestion स्थिति में Tab या से अगला suggestion चुनें, और से पिछला suggestion चुनें
  • JSON viewer mode JSON navigation और folding control प्रदान करता है
    • , Ctrl + K: ऊपर जाएँ
    • , Ctrl + J: नीचे जाएँ
    • Ctrl + H: आख़िरी item पर जाएँ
    • Ctrl + L: पहले item पर जाएँ
    • Enter: fold toggle करें
    • Ctrl + P: सब खोलें
    • Ctrl + N: सब समेटें

TOML configuration

  • jnv कई सुविधाओं को TOML configuration file से customize करता है
  • configuration file load करने की प्राथमिकता में command line से दिया गया -c या --config path पहले आता है, उसके बाद default configuration file path
  • default configuration file का स्थान platform के अनुसार अलग है
    • Linux: ~/.config/jnv/config.toml
    • macOS: ~/Library/Application Support/jnv/config.toml
    • Windows: C:\Users\{Username}\AppData\Roaming\jnv\config.toml
  • configuration file न होने पर यह पहली run में अपने आप बन जाती है
  • v0.7.0 में default.toml जैसी TOML configuration syntax बदल गई है, और उदाहरण नए फ़ॉर्मैट को दर्शाते हैं
    • इस बदलाव के लिए कोई migration tool उपलब्ध नहीं है
    • लोकल config.toml को नए syntax के अनुसार खुद बदलना या अपडेट करना होगा
  • terminal के प्रकार और environment के अनुसार कुछ characters और styles सही तरह से न दिखें
    • कुछ key bindings और decorative characters कुछ terminal emulators में दिख या काम न करें

समायोज्य configuration विकल्प

  • no_hint से यह सेट किया जा सकता है कि hint messages छिपाने हैं या नहीं
  • editor settings को focus और unfocus state के लिए अलग-अलग समायोजित किया जा सकता है
    • input mode में Insert और Overwrite का उपयोग होता है
    • word boundary characters की सूची देकर cursor movement और delete behavior तय किया जा सकता है
    • prefix display character, prefix style, cursor के नीचे वाले character की style, और बाकी characters की style निर्धारित की जा सकती है
  • JSON display settings में indentation, bracket style, key और value styles, selected row properties, और width overflow handling शामिल हैं
    • stream input में प्रोसेस किए जाने वाले JSON objects की अधिकतम संख्या max_streams से सीमित की जा सकती है
    • यह बड़ी data streams को संभालते समय memory उपयोग कम करने के लिए है, और यदि इसे सेट न किया जाए तो कोई सीमा नहीं होती
  • autocomplete settings search results और background loading की chunk size को समायोजित करती हैं
    • मान जितना बड़ा होगा, result display या loading completion उतनी तेज़ हो सकती है, लेकिन memory अधिक उपयोग हो सकती है
  • key bindings को exit, query copy, result copy, mode switch, editor operations, और JSON viewer operations के अनुसार configure किया जा सकता है
  • UI responsiveness settings input processing delay, window size change के बाद redraw delay, और spinner animation interval को समायोजित करती हैं

1 टिप्पणियां

 
GN⁺ 2024-03-20
Hacker News की राय
  • शानदार। एक छोटी-सी कमी यह है कि मध्यम आकार के JSON (16MB) पर भी यह बहुत धीमा है, और फ़ॉन्ट का रंग बहुत गहरा है (PR भेजा है)
    बेहतर performance वाला विकल्प ढूंढते हुए fx(https://fx.wtf) देखा; इसमें jq की सुविधाएं नहीं हैं, लेकिन यह तेज़ JSON viewer है

    • अगर “16MB JSON भी बहुत धीमा है” वाली बात सही है, तो aqny मज़े के लिए यहां आया और उसे काम मिल गया। performance issues से निपटना सबसे मज़ेदार होता है
    • कंपनी में 50MB से बड़े JSON files संभालने पड़ते हैं, इसलिए अगर jnv इतना handle कर सके तो बहुत अच्छा होगा
  • बढ़िया लग रहा है। jq में मुझे हमेशा जो बात खलती थी, वह यह थी कि run करने से पहले यह नहीं दिखता कि मैं कौन-सा data लाने वाला हूं

    • data structure देखने में यह tool मदद कर सकता है, और जिस value को ढूंढ रहे हैं उस तक धीरे-धीरे पहुंचने में भी उपयोगी है
      https://github.com/TomConlin/json_to_paths
  • सच में उत्साहित हूं। ज़रूर check करूँगा
    अब तक interactive queries के लिए jq और up [0] साथ इस्तेमाल करता था, लेकिन up का user experience मुझे खास पसंद नहीं था। खासकर लंबी queries या non-ASCII data के साथ असुविधाजनक था, इसलिए alternative ढूंढना चाहता हूं
    [0]: https://github.com/akavel/up

  • सच में अच्छा है। laptop मिलते ही तुरंत install करने का सोच रहा हूं
    मैंने पहले कुछ similar बनाया था, इसलिए यह post तुरंत आकर्षित कर गई
    https://github.com/bigH/interactively.git
    लगता है इस idea को और generalize करके CLI में और अधिक commands के लिए interactive interface जोड़ा जा सकता है। मैं काफी समय से एक “command builder” की कल्पना करता आया हूं, जो cursor position के हिसाब से सही docs लाए और command line edit करते समय दिखाए

  • बहुत शानदार। पता नहीं यह बहुत बड़ी मांग है या नहीं, लेकिन सोच रहा हूं कि क्या इसे OjG के साथ भी काम करने के लिए adapt किया जा सकता है, जो jq syntax की बजाय JSONPath इस्तेमाल करता है। अगर ठीक हो तो मैं खुशी से मदद करना चाहूंगा

  • अच्छा लग रहा है। jless(https://github.com/PaulJuliusMartinez/jless) से काफी मिलता-जुलता लगता है

    • लगता नहीं कि jless result को jq query के रूप में copy करता है
  • विकल्प के तौर पर अच्छा होगा कि सभी लोग fx के बारे में भी जानें
    इसमें map, filter, reduce जैसी चीज़ें भी कहीं ज़्यादा की जा सकती हैं, और semantics भी पहले से familiar चीज़ों के ज्यादा करीब हैं। YAML भी support करता है
    https://fx.wtf/getting-started

  • JSONL log files को dynamically filter और view करने के लिए tool ढूंढते-ढूंढते VisiData इस्तेमाल करने लगा
    अगर JSONL (JSON Lines) handle करते हैं, तो जोरदार recommendation है

  • लगा था कि यह fzf भर से भी संभव हो सकता है

  • अगर Sublime Text इस्तेमाल करते हैं, तो यही काम करने वाला एक plugin भी है [0]
    वैसे, यह plugin मैंने पहले बनाया था
    [0]: https://packagecontrol.io/packages/Jq