6 पॉइंट द्वारा GN⁺ 2026-01-03 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 का उपयोग करता है
    1. Inlined: छोटे और सरल objects या arrays को एक पंक्ति में दिखाता है
      • MaxInlineComplexity setting से allowed nesting level नियंत्रित होता है
    2. Compact Multiline Array: कई items को एक पंक्ति में रखते हुए, कई पंक्तियों में बाँटकर दिखाता है
      • MaxCompactArrayComplexity से nesting allowance बदला जा सकता है, -1 से disable किया जा सकता है
    3. Table: समान संरचना वाले items को column-aligned format में व्यवस्थित करता है
      • अगर inner containers बहुत जटिल हों तो केवल कुछ हिस्सों को compact किया जाता है
      • MaxTableRowComplexity और TableCommaPlacement से नियंत्रित किया जा सकता है
    4. Expanded: अगर ऊपर की शर्तें लागू न हों, तो हर item को कई पंक्तियों में indent करके दिखाता है

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 टिप्पणियां

 
GN⁺ 2026-01-03
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)

    • मैंने अभी इसे Rust में port किया है, और आगे इसका maintenance करने की योजना है
      इसे original comment में जोड़ना अच्छा रहेगा
      ज़्यादा जानकारी के लिए fracturedjson-rs GitHub और crates.io package देखें
      संबंधित explanation comment यहाँ है
    • यह अच्छा विचार है, लेकिन मुझे नहीं लगता कि test cases से आगे बढ़कर program equivalence guarantee तक पहुँचना आसान होगा
    • यह लगभग pure function के काफ़ी करीब है, इसलिए test harness लिखना बहुत आसान है
    • data-based tests किसी library पर भरोसा बनाने में बहुत प्रभावी होते हैं
      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 संभव है

    • port किया हुआ version भी derivative work है, इसलिए original author का copyright notice बनाए रखना चाहिए
  • यह प्रोजेक्ट सच में शानदार है
    JSON को और मानव-पठनीय बनाने की दिशा बहुत अच्छी लगती है
    मैं इसके उलट JSON को और machine-friendly बनाने वाला bonjson विकसित कर रहा हूँ
    इसमें JSON जैसी बिल्कुल वही capabilities और restrictions हैं, लेकिन इसे 35 गुना तेज़ी से पढ़ा और लिखा जा सकता है
    इसमें कोई नया type या feature नहीं है, यह सिर्फ़ वही करता है जो JSON कर सकता है

    • JSON सिर्फ़ एक simple notation है, इसलिए मुझे लगता है कि formal data model की ज़रूरत है
      उदाहरण के लिए, इसमें numbers की bit width या integer/floating-point distinction स्पष्ट नहीं होती
      ऐसा model हो तो representations के बीच 1:1 mapping संभव होगी
      इस विषय पर मैं यह लेख लिख रहा हूँ
    • दिलचस्प है, लेकिन “जो कुछ JSON कर सकता है, वह सब यह कर सकता है” वाला दावा देखते हुए security restrictions थोड़ा अप्रत्याशित लगती हैं
      उदाहरण के लिए "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 की ज़रूरत है
    • इससे हाल ही में पोस्ट हुआ Lite3 याद आ गया
    • compression ratio कैसा है, यह जानने की उत्सुकता है
  • हैरानी की बात है
    मैंने भी Python में लगभग 200 lines में इसी तरह की functionality बनाई थी, लेकिन मुझे पता नहीं था कि ऐसी library पहले से मौजूद है

  • क्या jq की तरह pipe input लेने का कोई option है?

    • repository में C# CLI code देखें, तो standard input/output या file specify की जा सकती है
      JavaScript version और Python wrapper भी वही CLI tool देते हैं
    • RCL default रूप से pretty-print करता है
      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 किया जा सकता है
    • ज़्यादातर मामलों में input file name को - देने पर stdin से पढ़ा जा सकता है
  • मैंने Virtuous नाम का JSON formatter बनाया है, और इसे देखकर लगा कि शायद अपना formatter छोड़ देना चाहिए — इतना प्रभावशाली है
    सच में बेहतरीन काम है

  • मैंने “mommyjson” नाम की एक Groovy script बनाई थी
    यह JSON formatting बनाए रखने के बजाय हर element का parent relation (array index, object name आदि) एक line में दिखाती है, ताकि data की location सहज रूप से समझ आए
    कोड देखें
    Groovy लोकप्रिय नहीं है, इसलिए अच्छा होगा अगर इसका Python port बन जाए

    • बढ़िया विचार है! ऐसे कई tools मौजूद हैं, इससे लगता है कि लोगों को सच में इसकी ज़रूरत है
      उदाहरण के लिए gron और मेरा बनाया jstream हैं
      अगर example output जोड़ दें तो समझना और आसान होगा
    • क्या इसका कोई sample output है?
  • मुझे संदेह है कि JSON सच में ऐसा format है जिसे मानव-पठनीयता के लिए और बेहतर बनाने की ज़रूरत है
    users को data दिखाने के और भी बेहतर तरीके हैं, और मेरा मानना है कि JSON का सही उपयोग systems के बीच data transfer के लिए है

    • लोग आमतौर पर ऐसे tools का उपयोग तब करते हैं जब कोई स्पष्ट schema या visualization tool नहीं होता
      debugging की स्थिति में, जब जटिल nested data को जल्दी समझना हो, यह काफ़ी उपयोगी होता है
      खासकर external systems के साथ integration code पर काम करते समय यह अक्सर होता है
    • मैं भी JSON data पढ़ने के लिए अक्सर jq या python -m json.tool का उपयोग करता हूँ
      अगर यह tool उससे बेहतर दिखा सके, तो इसकी पर्याप्त value है
    • अगर human-readable पहलू हटा दें, तो JSON एक inefficient encoding है
      आख़िरकार JSON की खासियत यही है कि यह मानव और मशीन दोनों के लिए पढ़ने योग्य है, इसलिए debugging के लिए इसकी उपयोगिता अब भी बनी रहती है
  • मुझे यह idea बहुत पसंद आया
    अभी adoption धीमा होने का कारण शायद ज़्यादातर languages और package managers(homebrew आदि) के लिए support की कमी है
    अगर .NET library को C-compatible shared library के रूप में compile किया जाए, तो कई languages से इसे आसानी से इस्तेमाल किया जा सकेगा

  • यह दिलचस्प approach है
    अच्छा होगा अगर code formatters भी इस तरह काम करें
    मौजूदा formatters बहुत rigid हैं, इसलिए structure समझना मुश्किल हो जाता है

    • मैंने एक C++ formatter बनाया है, जिसमें सिर्फ़ दो तरह के objects हैं: tab-aligned tables और single-line blocks
      comments को right-aligned रखकर साफ़-सुथरे ढंग से सजाया जाता है
      इस structure की वजह से switch-case blocks या macro tables को भी आसानी से 2D में align किया जा सकता है
      base layer को मैंने एक घंटे में code कर लिया था, और अब LSP व code inspection को जोड़कर blocks को अपने-आप detect करने वाला design बना रहा हूँ
    • मैंने पहले खुद एक XML formatter बनाया था ताकि वह table जैसा दिखे
      आदर्श रूप से XML को छोड़ देना चाहिए था, लेकिन legacy constraints की वजह से ऐसा करना संभव नहीं था