यह पेज हिन्दी में दिखाया जा रहा है, क्योंकि आपका ब्राउज़र यही भाषा माँगता है।
इस पेज का कोड चालू नहीं हुआ।
index.html को सीधे किसी फ़ोल्डर से खोलने पर ब्राउज़र JavaScript मॉड्यूल रोक देता है, इसलिए कोई फ़ाइल चुनने पर कुछ नहीं होगा। इसके बजाय फ़ोल्डर को http पर सर्व कीजिए:
ऊपर फ़ाइल चुनते ही यह खुल जाएगा।तैयार — इंटरनेट काट दीजिए, यह फिर भी चलता रहेगा।इस ब्राउज़र में उपलब्ध नहीं (बाकी सब फिर भी चलता है)।ऑफ़लाइन कैश के लिए https:// या localhost चाहिए।यहाँ कैश नहीं हो सकता, पर अपलोड फिर भी कुछ नहीं होता।आपकी फ़ाइलें कहीं नहीं गईं। {total} फ़ाइलें लोड हुईं, और वे सब इसी साइट की अपनी हैं। {platform}किसी चीज़ ने {hosts} से संपर्क किया, और यह टूल ऐसा कभी नहीं करता। यह देखने लायक बात है। {platform}विज्ञापन, माप और दान वाले बटन के लिए साइट की अपनी स्क्रिप्ट {hosts} होस्ट से आईं। उनमें से किसी को न कोई फ़ाइल मिली, न उसका एक बाइट।विज्ञापन, माप और दान वाले बटन के लिए साइट की अपनी स्क्रिप्ट {hosts} होस्ट से आईं। उनमें से किसी को न कोई फ़ाइल मिली, न उसका एक बाइट।कुछ गड़बड़ हो गई: {detail}। दोबारा शुरू करने के लिए पेज फिर से लोड कीजिए।{count} फ़ाइल पढ़ी जा रही है…{count} फ़ाइलें पढ़ी जा रही हैं…कोई उदाहरण आज़माइएउदाहरण बनाया जा रहा है…यह ब्राउज़र उदाहरण नहीं बना सका। इसके बजाय कोई फ़ाइल चुनिए।
JSON फ़ॉर्मैटर — सजाइए, दबाइए, या बदल दीजिए
JSON, XML, HTML, CSS और YAML, सजाए हुए या बदले हुए। कुछ भी किसी और के सर्वर में चिपकाया नहीं जाता।
● यह टूल टेक्स्ट और कोड कभी अपलोड नहीं करता। यहाँ कोई सर्वर है ही नहीं।
सजाना और बदलना, दोनों किसी लाइन पर की गई गणित हैं, और यहीं, इसी पेज में होते हैं। पार्सर हाथ से लिखे गए हैं और src/ में मौजूद हैं, यानी shared/parse-json.js, shared/parse-xml.js, css.js और shared/parse-yaml.js, और इनके सिवा कुछ है ही नहीं। इस टूल में किसी भी तरह की कोई नेटवर्क सुविधा है ही नहीं, इसलिए यहाँ से कुछ मँगाया भी नहीं जा सकता और भेजा भी नहीं जा सकता। यह बात इस साइट पर लगभग कहीं और से ज़्यादा यहाँ मायने रखती है, क्योंकि लोग किसी फ़ॉर्मैटर में जो चिपकाते हैं वे ऐक्सेस टोकन, सेशन कुकीज़, ग्राहकों के रिकॉर्ड और अभी जारी न हुआ कोड होते हैं।
✗ कोई अपलोड नहीं
✗ कोई खाता नहीं
✗ साइज़ की कोई सीमा नहीं
✓ ऑफ़लाइन चलता है
✓ ओपन सोर्स
लाइव जाँच:जाँच जारी…
ऑफ़लाइन:जाँच जारी…
हमारी बात पर भरोसा मत कीजिए। DevTools खोलिए, Network टैब पर नज़र रखिए, और कुछ सजाइए। एक भी रिक्वेस्ट आपके चिपकाए हुए का एक अक्षर तक नहीं ढोती। या फिर इंटरनेट काट दीजिए और तब भी उसे सजाकर देखिए।
प्राइवेसी का यह दावा कैसे जाँचा जा सकता है
आप जो चिपकाते हैं, उसके जाने को कोई जगह ही नहीं है। यह पेज जिन-जिन पतों से संपर्क कर सकता है, Content-Security-Policy उन सबके नाम गिना देती है, और उनमें से एक भी इस साइट का नहीं है। यहाँ कोई ऐसा एंडपॉइंट है ही नहीं जहाँ चिपकाया गया कोई टोकन जमा किया जा सके, और कोड में ऐसा कुछ भी नहीं जो उसे भेजता, अगर होता भी।
यहाँ कुछ भी कहीं से कुछ नहीं लाता।src/ में कहीं भी न fetch है, न XMLHttpRequest, न sendBeacon। हर पार्सर और हर लेखक इसी पेज के फ़ंक्शन हैं जो एक लाइन लेते हैं और एक लाइन लौटा देते हैं।
फ़ॉर्मैटर जो दिया गया था उसे वैसा ही रखते हैं। JSON ऑब्जेक्ट अपनी कुंजियों के साथ उसी क्रम में लौटता है जिसमें आपने लिखी थीं और अपनी संख्याओं के साथ ठीक वैसे ही लिखा हुआ जैसे आपने लिखा था, क्योंकि src/shared/parse-json.jsJSON.parse की पुकार नहीं, खुद एक पार्सर है। JSON.parse तो पूर्णांक जैसी कुंजियों का क्रम बदल देता है और बीस अंकों की id को सबसे नज़दीकी डबल बना देता है। ठीक यही tests/js/text-format.test.js के टेस्ट जाँचते हैं।
Google क्या लोड करता है, और उसे क्या नहीं दिया जाता। विज्ञापन और माप वाली स्क्रिप्ट Google से आती हैं, और दान का बटन Buy Me a Coffee से। इनमें से किसी को भी आपके टेक्स्ट का एक अक्षर तक नहीं सौंपा जाता। उसे पढ़ने, समझने या लिखने वाली हर पंक्ति इसी ऑरिजिन से आती है और रिपॉज़िटरी में दर्ज है।
यह ऑफ़लाइन भी चलता है। नेटवर्क काट दीजिए और टूल जस का तस काम करता रहेगा, क्योंकि इसमें नेटवर्क वाला कोई कदम कभी था ही नहीं। सबसे आसान सबूत यही है।
खुद जाँच लीजिए। ऊपर लिखी किसी भी बात को भरोसे पर मानने की ज़रूरत नहीं। यह पेज रिपॉज़िटरी के टेम्पलेट और कॉन्फ़िग से बनता है, एक ऐसी बिल्ड स्क्रिप्ट के ज़रिए जिसे आप पढ़ भी सकते हैं और खुद चला भी सकते हैं। उसका नतीजा dist ब्रांच पर कमिट रहता है, यानी जो सर्व हो रहा है और सोर्स से बिल्ड करने पर जो बनता है, दोनों का फ़र्क आप खुद देख सकते हैं:
सबसे पहले पढ़ने लायक फ़ाइलें ये हैं — Content-Security-Policy के लिए config/site.toml, src/shared/parse-json.js उस पार्सर के लिए जो आपकी कुंजियाँ उसी क्रम में रखता है जिसमें आपने लिखी थीं, और src/convert.js यह समझने के लिए कि हर रूपांतरण एक पार्सर और एक लेखक भर क्यों है, जिनके बीच ऐसा कुछ नहीं जो दोनों फ़ॉर्मैट एक साथ जानता हो।
अगर आपके दफ़्तर का सुरक्षा सॉफ़्टवेयर अपलोड की चेतावनी दे। वह उस पल पर नज़र रखता है जब ब्राउज़र में फ़ाइल चुनी जाती है, और यह नहीं जान सकता कि पन्ना उसे भेजने वाला है या नहीं — इसलिए चुनने पर ही चेतावनी देता है। यहाँ से कुछ नहीं भेजा जाता: ब्राउज़र के डेवलपर टूल खोलिए, Network पर जाइए, और एक फ़ाइल चुनिए। उसे ले जाने वाला कोई अनुरोध नहीं है, और पन्ने की अपनी स्थानीय झलक के अलावा कोई अनुरोध ही नहीं। यही जाँच आपकी IT टीम आधे मिनट में कर सकती है।
1 काम चुनिए
भाषा अंदाज़ा सिर्फ़ एक शुरुआती बिंदु है, और उसे ठीक करना एक क्लिक का काम है।
हर ऑब्जेक्ट की कुंजियाँ क्रम में लगा दीजिए कुंजियाँ जैसे पढ़ी जाती हैं उस हिसाब से, उनके कोड पॉइंट से नहीं, इसलिए item2, item10 से पहले आता है। सिर्फ़ JSON के लिए।
सबसे बाहरी एलिमेंट का नाम XML के सिरे पर एक एलिमेंट होता है और JSON में नहीं होता, इसलिए एक गढ़ना ही पड़ता है।
{reason} (पंक्ति {line}, कॉलम {column})पाठ का अंतएक पंक्ति-विरामएक टैब«{ch}»अनपेक्षित: मान के अंत के बाद {found}पाठ समय से पहले खत्म हो गयाकुंजी को दोहरे उद्धरण चिह्नों वाली स्ट्रिंग होना चाहिए, और यह {found} हैकुंजी के बाद कोलन की उम्मीद थी, मिला {found}अनपेक्षित: {found}अल्पविराम या बंद करने वाला मझला कोष्ठक चाहिए था, मिला {found}अल्पविराम या बंद करने वाला वर्ग कोष्ठक चाहिए था, मिला {found}यह ऑब्जेक्ट कभी बंद ही नहीं होतायह ऐरे कभी बंद ही नहीं होतायह स्ट्रिंग कभी बंद ही नहीं होती\u के बाद चार हेक्साडेसिमल अंक आने चाहिए\{next} ऐसा एस्केप नहीं जिसे JSON जानता होस्ट्रिंग के भीतर एक कच्चा कंट्रोल कैरेक्टर — उसे एस्केप की तरह लिखिएयह ऐसी संख्या नहीं जिसकी JSON इजाज़त देता होयह टिप्पणी कभी बंद ही नहीं होतीकोई ब्लॉक खुला नहीं और बंद करने वाला मझला कोष्ठक हैयह ब्लॉक कभी बंद ही नहीं होतायह स्ट्रिंग कभी बंद ही नहीं होतीयह कोष्ठक कभी बंद ही नहीं होता«{statement}» कोई घोषणा नहीं — इसमें कोलन है ही नहींयह टिप्पणी कभी बंद ही नहीं होतीयह CDATA खंड कभी बंद ही नहीं होतायह घोषणा कभी बंद ही नहीं होतीयह बंद करने वाला टैग कभी पूरा ही नहीं होता<{name}> कभी बंद ही नहीं होता</{name}> ऐसा टैग बंद करता है जो कभी खुला ही नहीं था</{name}> एक तत्व बंद करता है जबकि <{open}> अब भी खुला हैअनपेक्षित: <{name}> के भीतर «{ch}»टैग का नाम किसी अक्षर से शुरू होना चाहिए<{name}> कभी पूरा ही नहीं होता«{name}» विशेषता का कोई मान नहीं, और XML इसकी इजाज़त नहीं देताइस विशेषता का मान कभी बंद ही नहीं होताXML में विशेषता का मान उद्धरण चिह्नों में होना चाहिएयह पंक्ति उस ब्लॉक से कम हाशिये पर है जिसमें वह हैइस फ़ाइल में एक से ज़्यादा दस्तावेज़ हैं। उन्हें एक-एक करके बदलिए।यह पंक्ति ऊपर वाली कुंजी से ज़्यादा हाशिये पर हैयहाँ «key: value» की उम्मीद थीउपनाम (*name) समर्थित नहीं — JSON के पास «वही नोड दो बार» कहने का कोई तरीका ही नहींटैग (!name) समर्थित नहीं — प्रकार का अंदाज़ा लगाना पड़तायहाँ «?» कुंजी समर्थित नहीं«{header}» ऐसा ब्लॉक स्केलर नहीं जिसे यह पढ़ता होबंद करने वाले उद्धरण चिह्न के बाद और पाठ हैएंकर (&name) समर्थित नहीं — JSON के पास «वही नोड दो बार» कहने का कोई तरीका ही नहीं\{next} के बाद {width} हेक्साडेसिमल अंक चाहिए\{next} ऐसा एस्केप नहीं जिसे यह पढ़ता होउद्धरण चिह्नों वाली यह स्ट्रिंग कभी बंद ही नहीं होतीफ़्लो संग्रह के अंत के बाद और पाठ हैफ़्लो संग्रह समय से पहले खत्म हो जाता हैइस फ़्लो अनुक्रम में अल्पविराम या बंद करने वाला वर्ग कोष्ठक चाहिए थाइस फ़्लो मैपिंग में कुंजी के बाद कोलन चाहिए थाइस फ़्लो मैपिंग में अल्पविराम या बंद करने वाला मझला कोष्ठक चाहिए थाJSON से YAMLYAML से JSONJSON से XMLXML से JSONकुछ नहीं खोता: हर JSON दस्तावेज़ पहले से ही एक YAML दस्तावेज़ है। स्ट्रिंग सिर्फ़ वहीं उद्धरण चिह्नों में रखी जाती है जहाँ उन्हें खुला छोड़ने से उनका मतलब बदल जाता।टिप्पणियाँ खो जाती हैं, क्योंकि JSON के पास उन्हें रखने की जगह ही नहीं। एंकर, उपनाम और टैग अंदाज़े से भरे जाने के बजाय बदलाव को ही रोक देते हैं।ऐरे एक दोहराया हुआ तत्व बन जाता है, और वापस पढ़ा जाने वाला यही एक रूप है। खाली ऑब्जेक्ट और खाली स्ट्रिंग, दोनों खाली तत्व बनकर निकलते हैं।विशेषताएँ @ वाले नाम के सदस्य बन जाती हैं, तत्व का अपना पाठ वहाँ #text बन जाता है जहाँ उसे जगह बाँटनी पड़े, और हर मान स्ट्रिंग ही रहता है — XML ने कभी कहा ही नहीं कि कौन-से संख्याएँ थीं।{language} ऐसी भाषा नहीं जिसे यह सजाता हो।{n} B{n} KB{n} MBफ़ाइल पढ़ी जा रही है…वह फ़ाइल पढ़ी नहीं जा सकी: {reason}अभी कुछ नहीं।कुछ निकला ही नहीं।YAML का ऐसा दबा हुआ रूप है ही नहीं जिसे लिखना सार्थक हो: छोटा रूप फ़्लो शैली है, और वह पढ़ी ही नहीं जाती।यह न JSON लगता है, न XML, न HTML, न CSS, न YAML। अगर यह इनमें से कोई है तो मेन्यू से भाषा चुन लीजिए।{name} की तरह पढ़ा गया।{name}, दबाकर सपाट किया{name}, सजाकर रखा{what} — {before} से घटकर {after}, {percent}% कम{what} — {lines} पंक्तियाँ, {size}{name} — {lines} पंक्तियाँ, {size}कॉपीकॉपी हो गयाचुन लिया — Ctrl+C दबाइएआपका टेक्स्ट कहीं नहीं गया। {total} फ़ाइलें लोड हुईं। {platform}किसी चीज़ ने {hosts} से संपर्क किया, और यह टूल ऐसा कभी नहीं करता। {platform}विज्ञापन, माप और दान वाले बटन के लिए साइट की अपनी स्क्रिप्ट {hosts} होस्ट से आईं। उनमें से किसी को उसका एक अक्षर भी नहीं मिला।विज्ञापन, माप और दान वाले बटन के लिए साइट की अपनी स्क्रिप्ट {hosts} होस्ट से आईं। उनमें से किसी को उसका एक अक्षर भी नहीं मिला।
क्या इससे काम बन गया?
क्या गड़बड़ हुई?
शुक्रिया — इससे मदद मिलती है।
सिर्फ़ आपका जवाब भेजा जाता है, वह भी तभी जब आप बटन दबाते हैं। आपकी फ़ाइल, उसका नाम या उससे जुड़ी कोई बात कभी नहीं।
# JSON फ़ॉर्मैटर — सजाइए, दबाइए, या बदल दीजिए
JSON, XML, HTML, CSS और YAML, सजाए हुए या बदले हुए। कुछ भी किसी और के सर्वर में चिपकाया नहीं जाता।
> JSON, XML, HTML, CSS और YAML को सजाइए और छोटा कीजिए, और JSON को YAML या XML में बदलिए और वापस लाइए। पार्सर आपके ब्राउज़र में चलते हैं और कुछ भी अपलोड नहीं होता - कोई टोकन या कॉन्फ़िग फ़ाइल आपकी मशीन से कभी बाहर नहीं जाती।
यह पेज एक इंटरैक्टिव टूल है जो पूरी तरह आपके ब्राउज़र में चलता है, https://abox.tools/hi/json-formatter/ पर — आप इसे जो भी देते हैं, वह कहीं अपलोड नहीं होता। आगे वह सब कुछ है जो यह पेज इस टूल के बारे में शब्दों में कहता है; इसे इस्तेमाल करने के लिए यह पता खोलें।
## यह टूल टेक्स्ट और कोड **कभी अपलोड नहीं करता**। यहाँ कोई सर्वर है ही नहीं।
सजाना और बदलना, दोनों किसी लाइन पर की गई गणित हैं, और यहीं, इसी पेज में होते हैं। पार्सर हाथ से लिखे गए हैं और `src/` में मौजूद हैं, यानी `shared/parse-json.js`, `shared/parse-xml.js`, `css.js` और `shared/parse-yaml.js`, और इनके सिवा कुछ है ही नहीं। इस टूल में किसी भी तरह की कोई नेटवर्क सुविधा है ही नहीं, इसलिए यहाँ से कुछ मँगाया भी नहीं जा सकता और भेजा भी नहीं जा सकता। यह बात इस साइट पर लगभग कहीं और से ज़्यादा यहाँ मायने रखती है, क्योंकि लोग किसी फ़ॉर्मैटर में जो चिपकाते हैं वे ऐक्सेस टोकन, सेशन कुकीज़, ग्राहकों के रिकॉर्ड और अभी जारी न हुआ कोड होते हैं।
- ✗ कोई अपलोड नहीं
- ✗ कोई खाता नहीं
- ✗ साइज़ की कोई सीमा नहीं
- ✓ ऑफ़लाइन चलता है
- ✓ ओपन सोर्स
## JSON को बिना अपलोड किए कैसे सजाएँ या बदलें
1. **काम चुनिए।** दो टैब, एक डिब्बा: *Format* JSON, XML, HTML, CSS और YAML को सजाता या दबाकर चपटा करता है; *Convert* JSON को YAML या XML बनाता है और वापस लाता है। जो टेक्स्ट आपने अभी सजाया, वही टेक्स्ट आप बदलते हैं, बिना उसे दोबारा चिपकाए।
2. **इसे भीतर चिपकाइए, या फ़ाइल छोड़ दीजिए।** जो कुछ भी आप चुनकर कॉपी कर सकते हैं वह चल जाता है। पिकर पर छोड़ी गई फ़ाइल आपका अपना ब्राउज़र पढ़कर डिब्बे में रख देता है, और छोड़ने को अपलोड वाला कोई कदम है ही नहीं।
3. **इसे खुद भाषा पहचानने दीजिए, या बता दीजिए।** मेन्यू बताता है कि उसने टेक्स्ट को किस रूप में पढ़ा, और उसे ठीक करना एक क्लिक का काम है। अंदाज़ा सिर्फ़ एक शुरुआती बिंदु है, और इसीलिए उसे चुपचाप लागू करने के बजाय दिखा दिया जाता है।
4. **इंडेंट चुनिए, या इसे चपटा निचोड़ दीजिए।** दो स्पेस, चार, या एक टैब। चपटा निचोड़ना वही दस्तावेज़ है जिसमें से हर वह स्पेस निकाल दिया गया है जो सिर्फ़ पढ़ने के लिए था, और नतीजा बता देता है कि इससे कितने बाइट बचे।
5. **त्रुटि को वहीं पढ़िए जहाँ वह है।** यहाँ नाकाम होने वाला पार्सर बताता है कि उसे क्या मिला और किस पंक्ति तथा कॉलम पर, न कि “unexpected token at position 4193”। कॉन्फ़िग फ़ाइल ठीक करने के लिए आम तौर पर इतना काफ़ी होता है, बिना कुछ और खोले।
6. **नतीजा ले जाइए।** कॉपी कर लीजिए, या फ़ाइल की तरह डाउनलोड कर लीजिए, जिसका नाम उसी भाषा पर रखा जाता है जिसमें वह निकला।
## विस्तार से
[JSON को किसी को सौंपे बिना कैसे सजाएँ](https://abox.tools/hi/guides/format-json-without-uploading-it/): JSON को अपने ही ब्राउज़र में कैसे सजाएँ, जाँचें और निचोड़ें - फ़ॉर्मैटर को आपकी फ़ाइल के बारे में क्या कभी नहीं बदलना चाहिए, त्रुटि का संदेश कैसे पढ़ें, और आप जिस साइट में उसे चिपकाते हैं वह क्यों मायने रखती है।
## बॉक्स में और भी टूल
- [YAML से JSON कन्वर्टर](https://abox.tools/hi/yaml-to-json/): दोनों दिशाएँ, और हर दिशा की कीमत भी बताई जाती है। इनमें से कुछ भी किसी और के सर्वर में पेस्ट नहीं होता।
- [XML फ़ॉर्मैटर](https://abox.tools/hi/xml-formatter/): पढ़ने के लिए सजाया गया XML या भेजने के लिए दबाकर सपाट किया गया XML, और दोनों तरफ़ JSON में बदला हुआ। इनमें से कुछ भी किसी और के सर्वर में पेस्ट नहीं होता।
- [टेक्स्ट डिफ़](https://abox.tools/hi/text-diff/): दो टेक्स्ट भीतर, हर फ़र्क निशान लगाकर बाहर, पंक्ति-दर-पंक्ति और शब्द-दर-शब्द। कुछ भी किसी और के सर्वर में चिपकाया नहीं जाता।
- [Base64 एनकोडर-डिकोडर](https://abox.tools/hi/base64/): Base64, परसेंट एनकोडिंग, HTML एंटिटी, हेक्स और बैकस्लैश एस्केप, दोनों दिशाओं में। कुछ भी किसी और के सर्वर में चिपकाया नहीं जाता।
## सवाल
### क्या मेरा टेक्स्ट कहीं अपलोड होता है?
नहीं। इस पेज का हर पार्सर और हर लेखक एक फ़ंक्शन है जो आपके अपने ब्राउज़र में, आपके अपने हार्डवेयर पर चलता है। इस टूल में किसी भी तरह की कोई नेटवर्क सुविधा है ही नहीं, यानी यह न कभी कुछ मँगाता है, न कभी कुछ भेजता है। और पेज की `Content-Security-Policy` उन सारे पतों के नाम गिना देती है जिनसे यह संपर्क कर सकता है, जिनमें से एक भी इस साइट का नहीं है। किसी ऐक्सेस टोकन, सेशन कुकी या ग्राहक के रिकॉर्ड के लिए इसे इस्तेमाल करने की वजह भी यही है, क्योंकि इनमें से कोई भी किसी और के फ़ॉर्मैटर में चिपकाने का मतलब है उसे वह दे देना।
### क्या JSON सजाने से लेआउट के सिवा कुछ और भी बदलता है?
नहीं, और यह सुनने में जितना लगता है उससे मुश्किल है। कुंजियाँ उसी क्रम में रहती हैं जिसमें आपने लिखी थीं, जबकि `JSON.parse` पर बना फ़ॉर्मैटर पूर्णांक जैसी कुंजियों को चुपचाप आगे खिसका देता है, इसलिए `{"10":a,"2":b}` वापस `{"2":b,"10":a}` बनकर आता है। संख्याओं में वही अंक बचे रहते हैं जो आपने टाइप किए, इसलिए बीस अंकों की id अपने आखिरी तीन अंक किसी डबल के हाथों नहीं गँवाती और `1e999`, `null` नहीं बन जाता। दोहरी कुंजियाँ दोनों रखी जाती हैं, क्योंकि मानक यह कहता ही नहीं कि कौन-सी जीतेगी, और किसी एक को गिरा देना आपकी तरफ़ से फ़ैसला कर देना होता।
### यह कौन-कौन सी भाषाएँ सजा सकता है?
JSON, XML, HTML, CSS और YAML। JSON, XML, HTML और CSS को चपटा भी निचोड़ा जा सकता है; YAML को नहीं, क्योंकि उसका छोटा रूप फ़्लो स्टाइल है, जो पढ़ा ही नहीं जाता। और न पढ़ा जाना उस वजह के ठीक उलट है जिसकी वजह से कोई फ़ाइल YAML में रखी जाती है। JavaScript जान-बूझकर इस सूची में नहीं है, और उसके बारे में नीचे वाला सवाल देखिए।
### यह JavaScript, Python या SQL क्यों नहीं सजाता?
क्योंकि किसी प्रोग्रामिंग भाषा को सजाने का मतलब है उसे ढंग से पार्स करना, और जो फ़ॉर्मैटर लगभग सही निकलता है वह किसी फ़ॉर्मैटर के न होने से भी बुरा है, क्योंकि वह ऐसा कोड बनाता है जो देखने में ठीक लगता है और करता कुछ और है। JSON, XML, CSS और YAML के व्याकरण इतने छोटे हैं कि उन्हें हाथ से पढ़ा जा सके और ऐसे टेस्टों से जाँचा जा सके जिन्हें आप खुद चला सकते हैं। JavaScript का फ़ॉर्मैटर Prettier है, जो एक मेगाबाइट का पार्सर है, और उसकी जगह किसी वेब पेज पर नहीं, आपके एडिटर में है।
### मेरी YAML में no लिखा था और JSON में वह स्ट्रिंग बनकर निकला। क्यों?
क्योंकि वह स्ट्रिंग ही है, और यह YAML 1.1 नहीं, 1.2 पढ़ता है। YAML 1.1 में `yes`, `no`, `on` और `off` बूलियन थे, और यही वह मशहूर गड़बड़ है जो नॉर्वे के देश कोड को `false` बना देती है। YAML 1.2 ने उसे हटा दिया और यह भी हटाता है, यानी सिर्फ़ `true`, `false`, `null` और `~` ही टेक्स्ट के सिवा कुछ और पढ़े जाते हैं। दूसरी दिशा में जाते वक्त वे शब्द *उद्धरण चिह्नों में* लिखे जाते हैं, भले ही यह उन्हें बिना उद्धरण के भी टेक्स्ट ही पढ़ता, क्योंकि उस फ़ाइल को आगे जो भी खोलेगा वह शायद न पढ़े। PyYAML आज भी डिफ़ॉल्ट रूप से 1.1 पर है। सख्ती से पढ़ना और सँभलकर लिखना ही वह अकेला जोड़ा है जो दोनों तरफ़ सही रहता है।
### YAML को JSON में बदलने में क्या खो जाता है?
टिप्पणियाँ, क्योंकि JSON के पास उन्हें रखने की कोई जगह ही नहीं। ऐंकर, एलियस और टैग अंदाज़ा लगाने के बजाय सिरे से मना कर दिए जाते हैं। इनमें से हर एक ऐसा कुछ कहता है जो JSON कह ही नहीं सकती, और जो कन्वर्टर चुपचाप कोई एक अर्थ चुन लेता, वह आपको ऐसा दस्तावेज़ थमाता जो वह नहीं है जो फ़ाइल में लिखा था। दूसरी दिशा में कुछ नहीं खोता, क्योंकि हर JSON दस्तावेज़ पहले से ही एक YAML दस्तावेज़ है।
### JSON को XML में बदलने में क्या खो जाता है?
खाली ऑब्जेक्ट, खाली ऐरे और खाली स्ट्रिंग का आपसी फ़र्क, क्योंकि ये तीनों एक खाली एलिमेंट बन जाते हैं। हर मान का प्रकार भी खो जाता है, क्योंकि XML में प्रकार होते ही नहीं। इसीलिए उलटी दिशा में बदलने पर सब कुछ स्ट्रिंग ही छोड़ देता है, यह तय करने के बजाय कि `8080` कोई संख्या थी। ऐरे दोहराया गया एलिमेंट बन जाता है, और यही अकेला आकार है जो वापस पढ़ा जा सकता है, और जिस कुंजी को एलिमेंट का नाम सँभाल न सके उसके अटपटे अक्षर बदल दिए जाते हैं, वरना ऐसा दस्तावेज़ निकलता जिसे कोई पार्सर पढ़ेगा ही नहीं।
### क्या HTML का इंडेंट बदलने से पेज का दिखना बदल जाता है?
बदल सकता है, और यह उस बारे में ईमानदार है। दो इनलाइन एलिमेंट के बीच की खाली जगह दो शब्दों के बीच का स्पेस है, इसलिए उसे हिलाना मुफ़्त नहीं है। दो चीज़ें इसे काबू में रखती हैं। `<pre>` और `<textarea>` ठीक जैसे थे वैसे ही उतार दिए जाते हैं, और जिस एलिमेंट में टेक्स्ट के सिवा कुछ न हो वह एक ही पंक्ति में रहता है। बाकी सब सजाया जाता है।
### यह कितनी बड़ी फ़ाइल सँभाल सकता है?
यहाँ कोई सीमा तय की ही नहीं गई है, क्योंकि उसका बिल चुकाने वाला कोई सर्वर ही नहीं। व्यावहारिक छत आपकी अपनी मशीन है, और कुछ मेगाबाइट का JSON ठीक चलता है। बहुत लंबे दस्तावेज़ पर पेज आपकी टाइपिंग में एक ठहराव का इंतज़ार करता है और तब दोबारा सजाता है, बजाय इसके कि कीबोर्ड के लिए आपसे झगड़े।
### क्या यह मुफ़्त है, और क्या मुझे खाता चाहिए?
यह मुफ़्त है, और यहाँ न कोई खाता है, न साइन-इन, न ट्रायल, और न इस पर कोई सीमा कि आप कितना चिपकाएँ। साइट पर विज्ञापन हैं, और वही इसका खर्च उठाते हैं; विज्ञापनों को आपके टेक्स्ट के बारे में कुछ नहीं दिया जाता।
### क्या यह ऑफ़लाइन चलता है?
हाँ। पेज एक बार लोड कर लीजिए, फिर इंटरनेट काट दीजिए और यह चलता रहेगा। यह साबित करने का भी सबसे आसान तरीका यही है कि कुछ अपलोड नहीं हो रहा: जो टूल आपका टेक्स्ट सजाने के लिए कहीं भेजता, वह प्लग निकालते ही रुक जाता।
## प्राइवेसी का यह दावा कैसे जाँचा जा सकता है
- **आप जो चिपकाते हैं, उसके जाने को कोई जगह ही नहीं है।** यह पेज जिन-जिन पतों से संपर्क कर सकता है, Content-Security-Policy उन सबके नाम गिना देती है, और उनमें से एक भी इस साइट का नहीं है। यहाँ कोई ऐसा एंडपॉइंट है ही नहीं जहाँ चिपकाया गया कोई टोकन जमा किया जा सके, और कोड में ऐसा कुछ भी नहीं जो उसे भेजता, अगर होता भी।
- **यहाँ कुछ भी कहीं से कुछ नहीं लाता।** `src/` में कहीं भी न `fetch` है, न `XMLHttpRequest`, न `sendBeacon`। हर पार्सर और हर लेखक इसी पेज के फ़ंक्शन हैं जो एक लाइन लेते हैं और एक लाइन लौटा देते हैं।
- **फ़ॉर्मैटर जो दिया गया था उसे वैसा ही रखते हैं।** JSON ऑब्जेक्ट अपनी कुंजियों के साथ उसी क्रम में लौटता है जिसमें आपने लिखी थीं और अपनी संख्याओं के साथ ठीक वैसे ही लिखा हुआ जैसे आपने लिखा था, क्योंकि `src/shared/parse-json.js` `JSON.parse` की पुकार नहीं, खुद एक पार्सर है। `JSON.parse` तो पूर्णांक जैसी कुंजियों का क्रम बदल देता है और बीस अंकों की id को सबसे नज़दीकी डबल बना देता है। ठीक यही `tests/js/text-format.test.js` के टेस्ट जाँचते हैं।
- **Google क्या लोड करता है, और उसे क्या नहीं दिया जाता।** विज्ञापन और माप वाली स्क्रिप्ट Google से आती हैं, और दान का बटन Buy Me a Coffee से। इनमें से किसी को भी आपके टेक्स्ट का एक अक्षर तक नहीं सौंपा जाता। उसे पढ़ने, समझने या लिखने वाली हर पंक्ति इसी ऑरिजिन से आती है और रिपॉज़िटरी में दर्ज है।
- **यह ऑफ़लाइन भी चलता है।** नेटवर्क काट दीजिए और टूल जस का तस काम करता रहेगा, क्योंकि इसमें नेटवर्क वाला कोई कदम कभी था ही नहीं। सबसे आसान सबूत यही है।
**खुद जाँच लीजिए।** ऊपर लिखी किसी भी बात को भरोसे पर मानने की ज़रूरत नहीं। यह पेज रिपॉज़िटरी के टेम्पलेट और कॉन्फ़िग से बनता है, एक ऐसी बिल्ड स्क्रिप्ट के ज़रिए जिसे आप पढ़ भी सकते हैं और खुद चला भी सकते हैं। उसका नतीजा `dist` ब्रांच पर कमिट रहता है, यानी जो सर्व हो रहा है और सोर्स से बिल्ड करने पर जो बनता है, दोनों का फ़र्क आप खुद देख सकते हैं: https://github.com/A-Box-of-Tools/website
सबसे पहले पढ़ने लायक फ़ाइलें ये हैं — Content-Security-Policy के लिए `config/site.toml`, `src/shared/parse-json.js` उस पार्सर के लिए जो आपकी कुंजियाँ उसी क्रम में रखता है जिसमें आपने लिखी थीं, और `src/convert.js` यह समझने के लिए कि हर रूपांतरण एक पार्सर और एक लेखक भर क्यों है, जिनके बीच ऐसा कुछ नहीं जो दोनों फ़ॉर्मैट एक साथ जानता हो।
JSON को बिना अपलोड किए कैसे सजाएँ या बदलें
काम चुनिए। दो टैब, एक डिब्बा: Format JSON, XML, HTML, CSS और YAML को सजाता या दबाकर चपटा करता है; Convert JSON को YAML या XML बनाता है और वापस लाता है। जो टेक्स्ट आपने अभी सजाया, वही टेक्स्ट आप बदलते हैं, बिना उसे दोबारा चिपकाए।
इसे भीतर चिपकाइए, या फ़ाइल छोड़ दीजिए। जो कुछ भी आप चुनकर कॉपी कर सकते हैं वह चल जाता है। पिकर पर छोड़ी गई फ़ाइल आपका अपना ब्राउज़र पढ़कर डिब्बे में रख देता है, और छोड़ने को अपलोड वाला कोई कदम है ही नहीं।
इसे खुद भाषा पहचानने दीजिए, या बता दीजिए। मेन्यू बताता है कि उसने टेक्स्ट को किस रूप में पढ़ा, और उसे ठीक करना एक क्लिक का काम है। अंदाज़ा सिर्फ़ एक शुरुआती बिंदु है, और इसीलिए उसे चुपचाप लागू करने के बजाय दिखा दिया जाता है।
इंडेंट चुनिए, या इसे चपटा निचोड़ दीजिए। दो स्पेस, चार, या एक टैब। चपटा निचोड़ना वही दस्तावेज़ है जिसमें से हर वह स्पेस निकाल दिया गया है जो सिर्फ़ पढ़ने के लिए था, और नतीजा बता देता है कि इससे कितने बाइट बचे।
त्रुटि को वहीं पढ़िए जहाँ वह है। यहाँ नाकाम होने वाला पार्सर बताता है कि उसे क्या मिला और किस पंक्ति तथा कॉलम पर, न कि “unexpected token at position 4193”। कॉन्फ़िग फ़ाइल ठीक करने के लिए आम तौर पर इतना काफ़ी होता है, बिना कुछ और खोले।
नतीजा ले जाइए। कॉपी कर लीजिए, या फ़ाइल की तरह डाउनलोड कर लीजिए, जिसका नाम उसी भाषा पर रखा जाता है जिसमें वह निकला।
विस्तार से
JSON को किसी को सौंपे बिना कैसे सजाएँJSON को अपने ही ब्राउज़र में कैसे सजाएँ, जाँचें और निचोड़ें - फ़ॉर्मैटर को आपकी फ़ाइल के बारे में क्या कभी नहीं बदलना चाहिए, त्रुटि का संदेश कैसे पढ़ें, और आप जिस साइट में उसे चिपकाते हैं वह क्यों मायने रखती है।
नहीं। इस पेज का हर पार्सर और हर लेखक एक फ़ंक्शन है जो आपके अपने ब्राउज़र में, आपके अपने हार्डवेयर पर चलता है। इस टूल में किसी भी तरह की कोई नेटवर्क सुविधा है ही नहीं, यानी यह न कभी कुछ मँगाता है, न कभी कुछ भेजता है। और पेज की Content-Security-Policy उन सारे पतों के नाम गिना देती है जिनसे यह संपर्क कर सकता है, जिनमें से एक भी इस साइट का नहीं है। किसी ऐक्सेस टोकन, सेशन कुकी या ग्राहक के रिकॉर्ड के लिए इसे इस्तेमाल करने की वजह भी यही है, क्योंकि इनमें से कोई भी किसी और के फ़ॉर्मैटर में चिपकाने का मतलब है उसे वह दे देना।
क्या JSON सजाने से लेआउट के सिवा कुछ और भी बदलता है?
नहीं, और यह सुनने में जितना लगता है उससे मुश्किल है। कुंजियाँ उसी क्रम में रहती हैं जिसमें आपने लिखी थीं, जबकि JSON.parse पर बना फ़ॉर्मैटर पूर्णांक जैसी कुंजियों को चुपचाप आगे खिसका देता है, इसलिए {"10":a,"2":b} वापस {"2":b,"10":a} बनकर आता है। संख्याओं में वही अंक बचे रहते हैं जो आपने टाइप किए, इसलिए बीस अंकों की id अपने आखिरी तीन अंक किसी डबल के हाथों नहीं गँवाती और 1e999, null नहीं बन जाता। दोहरी कुंजियाँ दोनों रखी जाती हैं, क्योंकि मानक यह कहता ही नहीं कि कौन-सी जीतेगी, और किसी एक को गिरा देना आपकी तरफ़ से फ़ैसला कर देना होता।
यह कौन-कौन सी भाषाएँ सजा सकता है?
JSON, XML, HTML, CSS और YAML। JSON, XML, HTML और CSS को चपटा भी निचोड़ा जा सकता है; YAML को नहीं, क्योंकि उसका छोटा रूप फ़्लो स्टाइल है, जो पढ़ा ही नहीं जाता। और न पढ़ा जाना उस वजह के ठीक उलट है जिसकी वजह से कोई फ़ाइल YAML में रखी जाती है। JavaScript जान-बूझकर इस सूची में नहीं है, और उसके बारे में नीचे वाला सवाल देखिए।
यह JavaScript, Python या SQL क्यों नहीं सजाता?
क्योंकि किसी प्रोग्रामिंग भाषा को सजाने का मतलब है उसे ढंग से पार्स करना, और जो फ़ॉर्मैटर लगभग सही निकलता है वह किसी फ़ॉर्मैटर के न होने से भी बुरा है, क्योंकि वह ऐसा कोड बनाता है जो देखने में ठीक लगता है और करता कुछ और है। JSON, XML, CSS और YAML के व्याकरण इतने छोटे हैं कि उन्हें हाथ से पढ़ा जा सके और ऐसे टेस्टों से जाँचा जा सके जिन्हें आप खुद चला सकते हैं। JavaScript का फ़ॉर्मैटर Prettier है, जो एक मेगाबाइट का पार्सर है, और उसकी जगह किसी वेब पेज पर नहीं, आपके एडिटर में है।
मेरी YAML में no लिखा था और JSON में वह स्ट्रिंग बनकर निकला। क्यों?
क्योंकि वह स्ट्रिंग ही है, और यह YAML 1.1 नहीं, 1.2 पढ़ता है। YAML 1.1 में yes, no, on और off बूलियन थे, और यही वह मशहूर गड़बड़ है जो नॉर्वे के देश कोड को false बना देती है। YAML 1.2 ने उसे हटा दिया और यह भी हटाता है, यानी सिर्फ़ true, false, null और ~ ही टेक्स्ट के सिवा कुछ और पढ़े जाते हैं। दूसरी दिशा में जाते वक्त वे शब्द उद्धरण चिह्नों में लिखे जाते हैं, भले ही यह उन्हें बिना उद्धरण के भी टेक्स्ट ही पढ़ता, क्योंकि उस फ़ाइल को आगे जो भी खोलेगा वह शायद न पढ़े। PyYAML आज भी डिफ़ॉल्ट रूप से 1.1 पर है। सख्ती से पढ़ना और सँभलकर लिखना ही वह अकेला जोड़ा है जो दोनों तरफ़ सही रहता है।
YAML को JSON में बदलने में क्या खो जाता है?
टिप्पणियाँ, क्योंकि JSON के पास उन्हें रखने की कोई जगह ही नहीं। ऐंकर, एलियस और टैग अंदाज़ा लगाने के बजाय सिरे से मना कर दिए जाते हैं। इनमें से हर एक ऐसा कुछ कहता है जो JSON कह ही नहीं सकती, और जो कन्वर्टर चुपचाप कोई एक अर्थ चुन लेता, वह आपको ऐसा दस्तावेज़ थमाता जो वह नहीं है जो फ़ाइल में लिखा था। दूसरी दिशा में कुछ नहीं खोता, क्योंकि हर JSON दस्तावेज़ पहले से ही एक YAML दस्तावेज़ है।
JSON को XML में बदलने में क्या खो जाता है?
खाली ऑब्जेक्ट, खाली ऐरे और खाली स्ट्रिंग का आपसी फ़र्क, क्योंकि ये तीनों एक खाली एलिमेंट बन जाते हैं। हर मान का प्रकार भी खो जाता है, क्योंकि XML में प्रकार होते ही नहीं। इसीलिए उलटी दिशा में बदलने पर सब कुछ स्ट्रिंग ही छोड़ देता है, यह तय करने के बजाय कि 8080 कोई संख्या थी। ऐरे दोहराया गया एलिमेंट बन जाता है, और यही अकेला आकार है जो वापस पढ़ा जा सकता है, और जिस कुंजी को एलिमेंट का नाम सँभाल न सके उसके अटपटे अक्षर बदल दिए जाते हैं, वरना ऐसा दस्तावेज़ निकलता जिसे कोई पार्सर पढ़ेगा ही नहीं।
क्या HTML का इंडेंट बदलने से पेज का दिखना बदल जाता है?
बदल सकता है, और यह उस बारे में ईमानदार है। दो इनलाइन एलिमेंट के बीच की खाली जगह दो शब्दों के बीच का स्पेस है, इसलिए उसे हिलाना मुफ़्त नहीं है। दो चीज़ें इसे काबू में रखती हैं। <pre> और <textarea> ठीक जैसे थे वैसे ही उतार दिए जाते हैं, और जिस एलिमेंट में टेक्स्ट के सिवा कुछ न हो वह एक ही पंक्ति में रहता है। बाकी सब सजाया जाता है।
यह कितनी बड़ी फ़ाइल सँभाल सकता है?
यहाँ कोई सीमा तय की ही नहीं गई है, क्योंकि उसका बिल चुकाने वाला कोई सर्वर ही नहीं। व्यावहारिक छत आपकी अपनी मशीन है, और कुछ मेगाबाइट का JSON ठीक चलता है। बहुत लंबे दस्तावेज़ पर पेज आपकी टाइपिंग में एक ठहराव का इंतज़ार करता है और तब दोबारा सजाता है, बजाय इसके कि कीबोर्ड के लिए आपसे झगड़े।
क्या यह मुफ़्त है, और क्या मुझे खाता चाहिए?
यह मुफ़्त है, और यहाँ न कोई खाता है, न साइन-इन, न ट्रायल, और न इस पर कोई सीमा कि आप कितना चिपकाएँ। साइट पर विज्ञापन हैं, और वही इसका खर्च उठाते हैं; विज्ञापनों को आपके टेक्स्ट के बारे में कुछ नहीं दिया जाता।
क्या यह ऑफ़लाइन चलता है?
हाँ। पेज एक बार लोड कर लीजिए, फिर इंटरनेट काट दीजिए और यह चलता रहेगा। यह साबित करने का भी सबसे आसान तरीका यही है कि कुछ अपलोड नहीं हो रहा: जो टूल आपका टेक्स्ट सजाने के लिए कहीं भेजता, वह प्लग निकालते ही रुक जाता।