FracturedJson
(github.com/j-brooke)- JSON डेटा को इंसानों के लिए पढ़ने में आसान तरीके से व्यवस्थित रखते हुए भी उसे कॉम्पैक्ट रूप में बनाए रखने वाली formatting utility का संग्रह
- arrays और objects को जहाँ तक संभव हो एक ही पंक्ति में दिखाता है, और जब संरचना समान हो तो टेबल के रूप में align करता है
- comments preserve करने की सुविधा देता है; JSON standard में comments नहीं होते, लेकिन वास्तविक उपयोग परिवेश में आम comments को साथ बनाए रखता है
- .NET library, JavaScript/TypeScript package, VS Code extension, browser formatter जैसे कई environments में इस्तेमाल किया जा सकता है
- मौजूदा JSON formatters की readability सीमाओं को बेहतर बनाकर developers और data analysts की visual understanding बढ़ाने वाला tool
FracturedJson अवलोकन
- FracturedJson utilities का एक संग्रह है जो इंसानों के लिए पढ़ने में आसान लेकिन अपेक्षाकृत compact JSON format बनाता है
- arrays और objects बहुत लंबे या जटिल न हों तो उन्हें एक पंक्ति में आउटपुट करता है
- समान संरचना वाली कई पंक्तियों को fields align करके table के रूप में दिखाता है
- लंबे arrays को कई पंक्तियों में बाँटकर, एक पंक्ति में कई items रखता है
- अलग-अलग settings के जरिए output format को नियंत्रित किया जा सकता है, और ज़्यादातर मामलों में default settings से भी अच्छा परिणाम मिलता है
- यह browser-based formatter page, .NET library, JavaScript/TypeScript package, और VS Code extension के रूप में उपलब्ध है
- Python के लिए विकल्प भी अलग से बताए गए हैं
Motivation
- ज़्यादातर JSON libraries केवल दो तरह के formats देती हैं
- Minified JSON: efficient, लेकिन इंसानों के लिए पढ़ना मुश्किल
- Beautified/Indented JSON: बहुत ज़्यादा फैला हुआ, इसलिए जल्दी समझना कठिन
- FracturedJson डेटा को वैसे format करता है जैसे कोई इंसान सीधे लिखता
- बहुत जटिल या लंबा न हो तो containers को एक पंक्ति में रखता है
- समान arrays या objects को table format में align करता है
काम करने का तरीका (How It Works)
- FracturedJson चार तरह की formatting styles का उपयोग करता है
- Inlined: छोटे और सरल objects या arrays को एक पंक्ति में दिखाता है
MaxInlineComplexitysetting से allowed nesting level नियंत्रित होता है
- Compact Multiline Array: कई items को एक पंक्ति में रखते हुए, कई पंक्तियों में बाँटकर दिखाता है
MaxCompactArrayComplexityसे nesting allowance बदला जा सकता है,-1से disable किया जा सकता है
- Table: समान संरचना वाले items को column-aligned format में व्यवस्थित करता है
- अगर inner containers बहुत जटिल हों तो केवल कुछ हिस्सों को compact किया जाता है
MaxTableRowComplexityऔरTableCommaPlacementसे नियंत्रित किया जा सकता है
- Expanded: अगर ऊपर की शर्तें लागू न हों, तो हर item को कई पंक्तियों में indent करके दिखाता है
- Inlined: छोटे और सरल objects या arrays को एक पंक्ति में दिखाता है
comments हैंडलिंग
- JSON standard comments की अनुमति नहीं देता, लेकिन FracturedJson comments preserve करने की सुविधा देता है
- comments संबंधित elements के साथ बने रहते हैं, और multi-line comments व inline comments दोनों संभाले जा सकते हैं
Discussions
- user questions, feedback, और suggestions के लिए GitHub Discussions space उपलब्ध है
- project से जुड़ी discussions और improvement suggestions दी जा सकती हैं
1 टिप्पणियां
Hacker News की टिप्पणियाँ
इस समय इस प्रोजेक्ट के दो maintained implementations हैं
एक C# version है(FracturedJson .NET Library), और दूसरा TypeScript/JavaScript version है(FracturedJsonJs)
पहले एक pure Python version भी था, लेकिन अब उसका maintenance नहीं हो रहा, और उसकी जगह C# code को wrap करने वाले Python wrapper(fractured-json) ने ले ली है
इस Python version में साफ़ लिखा है कि .NET runtime चाहिए, इसलिए सिर्फ़ pip install से इसे install करना आसान नहीं है
मुझे लगता है कि यह language-independent conformance suite बनाने का अच्छा मौका है — यानी data-based test set जिससे verify किया जा सके कि अलग-अलग implementations एक जैसा behavior देती हैं या नहीं
संदर्भ के लिए, पुराना Python version पहले से ही इस तरह के tests इस्तेमाल करता था (compact-json test data)
इसे original comment में जोड़ना अच्छा रहेगा
ज़्यादा जानकारी के लिए fracturedjson-rs GitHub और crates.io package देखें
संबंधित explanation comment यहाँ है
html5lib-tests या मेरे बनाए xss-bench इसके उदाहरण हैं
मैंने Rust में port किया हुआ version बनाया है, और CLI tool के ज़रिए JSON को इस format में arrange किया जा सकता है
इसे fracturedjson-rs और crates.io package से install किया जा सकता है (
cargo install fracturedjson)यह कई options देता है, और comment handling style, indentation style, line width limits जैसी चीज़ों पर fine-grained control संभव है
यह प्रोजेक्ट सच में शानदार है
JSON को और मानव-पठनीय बनाने की दिशा बहुत अच्छी लगती है
मैं इसके उलट JSON को और machine-friendly बनाने वाला bonjson विकसित कर रहा हूँ
इसमें JSON जैसी बिल्कुल वही capabilities और restrictions हैं, लेकिन इसे 35 गुना तेज़ी से पढ़ा और लिखा जा सकता है
इसमें कोई नया type या feature नहीं है, यह सिर्फ़ वही करता है जो JSON कर सकता है
उदाहरण के लिए, इसमें numbers की bit width या integer/floating-point distinction स्पष्ट नहीं होती
ऐसा model हो तो representations के बीच 1:1 mapping संभव होगी
इस विषय पर मैं यह लेख लिख रहा हूँ
उदाहरण के लिए
"a\u0000b"जैसी string valid JSON है, लेकिन अगर उसे serialize नहीं किया जा सकता, तो वह दावा पूरी तरह सही नहीं होगामैंने भी कभी एक serializer बनाया था जो JSON और binary files को एक common interface से save/load करता था
मेरे अनुभव में JSON एक ऐसा format था जिसमें restrictions ज़्यादा और फ़ायदे कम थे
इसलिए मैंने उसे एक loose format में बदल दिया जिसमें commas, colons, quotes छोड़े जा सकते हैं, और multiline strings व comments की अनुमति है
अब JSON को हमेशा “मानव-पठनीय” format बताने का दिखावा बंद होना चाहिए
non-JSON-centric environments के लिए एक standard alternative की ज़रूरत है
हैरानी की बात है
मैंने भी Python में लगभग 200 lines में इसी तरह की functionality बनाई थी, लेकिन मुझे पता नहीं था कि ऐसी library पहले से मौजूद है
क्या jq की तरह pipe input लेने का कोई option है?
JavaScript version और Python wrapper भी वही CLI tool देते हैं
rcl eसे RCL format औरrcl jeसे JSON output देखा जा सकता हैFracturedJson जैसा table alignment तो नहीं है, लेकिन यह Philip Wadler's A Prettier Printer algorithm पर आधारित है, इसलिए width के हिसाब से automatic line breaks करता है
<()process substitution से temporary file बनाकर भी इसे handle किया जा सकता है-देने पर stdin से पढ़ा जा सकता हैमैंने Virtuous नाम का JSON formatter बनाया है, और इसे देखकर लगा कि शायद अपना formatter छोड़ देना चाहिए — इतना प्रभावशाली है
सच में बेहतरीन काम है
मैंने “mommyjson” नाम की एक Groovy script बनाई थी
यह JSON formatting बनाए रखने के बजाय हर element का parent relation (array index, object name आदि) एक line में दिखाती है, ताकि data की location सहज रूप से समझ आए
कोड देखें
Groovy लोकप्रिय नहीं है, इसलिए अच्छा होगा अगर इसका Python port बन जाए
उदाहरण के लिए gron और मेरा बनाया jstream हैं
अगर example output जोड़ दें तो समझना और आसान होगा
मुझे संदेह है कि JSON सच में ऐसा format है जिसे मानव-पठनीयता के लिए और बेहतर बनाने की ज़रूरत है
users को data दिखाने के और भी बेहतर तरीके हैं, और मेरा मानना है कि JSON का सही उपयोग systems के बीच data transfer के लिए है
debugging की स्थिति में, जब जटिल nested data को जल्दी समझना हो, यह काफ़ी उपयोगी होता है
खासकर external systems के साथ integration code पर काम करते समय यह अक्सर होता है
python -m json.toolका उपयोग करता हूँअगर यह tool उससे बेहतर दिखा सके, तो इसकी पर्याप्त value है
आख़िरकार JSON की खासियत यही है कि यह मानव और मशीन दोनों के लिए पढ़ने योग्य है, इसलिए debugging के लिए इसकी उपयोगिता अब भी बनी रहती है
मुझे यह idea बहुत पसंद आया
अभी adoption धीमा होने का कारण शायद ज़्यादातर languages और package managers(homebrew आदि) के लिए support की कमी है
अगर .NET library को C-compatible shared library के रूप में compile किया जाए, तो कई languages से इसे आसानी से इस्तेमाल किया जा सकेगा
यह दिलचस्प approach है
अच्छा होगा अगर code formatters भी इस तरह काम करें
मौजूदा formatters बहुत rigid हैं, इसलिए structure समझना मुश्किल हो जाता है
comments को right-aligned रखकर साफ़-सुथरे ढंग से सजाया जाता है
इस structure की वजह से switch-case blocks या macro tables को भी आसानी से 2D में align किया जा सकता है
base layer को मैंने एक घंटे में code कर लिया था, और अब LSP व code inspection को जोड़कर blocks को अपने-आप detect करने वाला design बना रहा हूँ
आदर्श रूप से XML को छोड़ देना चाहिए था, लेकिन legacy constraints की वजह से ऐसा करना संभव नहीं था