- 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 jnvcat data.json | pixi exec jnvconda install jnv
- Docker के लिए इमेज खुद build करके चलाने का उदाहरण दिया गया है
- बताया गया है कि इमेज निकट भविष्य में किसी registry पर उपलब्ध कराई जाएगी
- Cargo से इंस्टॉल किया जा सकता है
cargo install jnv
उपयोग उदाहरण और CLI विकल्प
- इसे फ़ाइल या standard input के साथ चलाया जा सकता है
cat data.json | jnvjnv data.json
- UNIX वातावरण में बाहर निकलते समय मौजूदा result को stdout में लिखा जा सकता है
cat data.json | jnv --write-to-stdout | some-commandcat 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या--configpath पहले आता है, उसके बाद 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
- Linux:
- 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 निर्धारित की जा सकती है
- input mode में
- JSON display settings में indentation, bracket style, key और value styles, selected row properties, और width overflow handling शामिल हैं
- stream input में प्रोसेस किए जाने वाले JSON objects की अधिकतम संख्या
max_streamsसे सीमित की जा सकती है - यह बड़ी data streams को संभालते समय memory उपयोग कम करने के लिए है, और यदि इसे सेट न किया जाए तो कोई सीमा नहीं होती
- stream input में प्रोसेस किए जाने वाले JSON objects की अधिकतम संख्या
- 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 टिप्पणियां
Hacker News की राय
शानदार। एक छोटी-सी कमी यह है कि मध्यम आकार के JSON (16MB) पर भी यह बहुत धीमा है, और फ़ॉन्ट का रंग बहुत गहरा है (PR भेजा है)
बेहतर performance वाला विकल्प ढूंढते हुए fx(https://fx.wtf) देखा; इसमें jq की सुविधाएं नहीं हैं, लेकिन यह तेज़ JSON viewer है
बढ़िया लग रहा है। jq में मुझे हमेशा जो बात खलती थी, वह यह थी कि run करने से पहले यह नहीं दिखता कि मैं कौन-सा data लाने वाला हूं
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) से काफी मिलता-जुलता लगता है
विकल्प के तौर पर अच्छा होगा कि सभी लोग 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 भर से भी संभव हो सकता है
[0]: https://dev.to/pbnj/fzf-jq-interactive-jq-15no
demo: https://asciinema.org/a/349330
अगर Sublime Text इस्तेमाल करते हैं, तो यही काम करने वाला एक plugin भी है [0]
वैसे, यह plugin मैंने पहले बनाया था
[0]: https://packagecontrol.io/packages/Jq