# 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` यह समझने के लिए कि हर रूपांतरण एक पार्सर और एक लेखक भर क्यों है, जिनके बीच ऐसा कुछ नहीं जो दोनों फ़ॉर्मैट एक साथ जानता हो।
