# JSON को किसी को सौंपे बिना कैसे सजाएँ

JSON सजाने से खाली जगह बदलनी चाहिए और उसके सिवा कुछ नहीं। जो टूल यह करने की पेशकश करते हैं उनमें से ज़्यादातर इससे ज़्यादा बदल देते हैं, और उनमें से कोई भी इसका ज़िक्र नहीं करता। यहाँ लिखा है कि किन बातों पर नज़र रखनी है, फ़ाइल पार्स न हो तो त्रुटि कैसे पढ़नी है, और जिस डिब्बे में आप कोई कॉन्फ़िग फ़ाइल चिपकाते हैं उसके बारे में सोचना क्यों बनता है।

[JSON फ़ॉर्मैटर खोलें](https://abox.tools/hi/json-formatter/): JSON, XML, HTML, CSS और YAML, सजाए हुए या बदले हुए। कुछ भी किसी और के सर्वर में चिपकाया नहीं जाता।

आखिरी अपडेट 26 अगस्त 2026

## छोटा जवाब

[JSON फ़ॉर्मेटर](https://abox.tools/hi/json-formatter/) खोलिए, JSON को डिब्बे में चिपकाइए, और पढ़ लीजिए। सजावट आपके टाइप करते-करते होती जाती है, भाषा टेक्स्ट से खुद पहचान ली जाती है, और जब तक आप कुछ और न कहें इंडेंट दो स्पेस का रहता है। कुछ भी अपलोड नहीं होता, क्योंकि उसके जाने को कोई जगह ही नहीं है: पार्सर कुछ सौ पंक्तियों का JavaScript है जो उसी टैब में चल रहा है जो आपके सामने पहले से खुला है।

नीचे लिखा सब कुछ वह हिस्सा है जो इनमें से किसी भी दूसरे विकल्प में कोई कॉन्फ़िगरेशन फ़ाइल चिपकाने से पहले जान लेना बनता है: फ़ॉर्मैटर को क्या बदलने की इजाज़त है, उनमें से ज़्यादातर फिर भी क्या बदल देते हैं, और जब फ़ाइल पार्स ही न हो तो त्रुटि कैसे पढ़ी जाए।

![दो खाने: बाईं ओर JSON की एक ही पंक्ति, दाईं ओर वही दस्तावेज़ दो जगह की इंडेंट के साथ सजा हुआ।](https://abox.tools/screens/format-json-without-uploading-it/panes.webp)

एक पंक्ति गई, पढ़ने लायक कुछ निकला। इसके लिए कहीं कुछ भेजा नहीं गया।

## सजाना है क्या, और क्या नहीं है

JSON में वाक्य-रचना लगभग है ही नहीं। एक ऑब्जेक्ट, एक ऐरे, एक स्ट्रिंग, एक संख्या, और तीन शब्द, यानी `true`, `false` तथा `null`। इन टुकड़ों के बीच खाली जगह का कोई मतलब नहीं होता। यह फ़ाइल

```
{"name":"thing","tags":["local","offline"]}
```

और यह फ़ाइल

```
{
  "name": "thing",
  "tags": [
    "local",
    "offline"
  ]
}
```

एक ही दस्तावेज़ हैं। सजाना पहली से दूसरी तक जाने का काम है, और *पूरा काम बस यही है*। फ़ॉर्मैटर आपकी फ़ाइल के साथ इसके सिवा जो कुछ भी करे, चाहे क्रम बदलना हो, गोल करना हो या गिरा देना, वह इस बात में बदलाव है कि दस्तावेज़ कहता क्या है, और वह बिना पूछे किया गया है।

उन बदलावों में से तीन इतने आम हैं कि उनका नाम लेना बनता है, क्योंकि वे चुपचाप होते हैं और क्योंकि एक दोपहर में लिखा गया फ़ॉर्मैटर डिफ़ॉल्ट रूप से यही करता है।

## वे तीन चीज़ें जो फ़ॉर्मैटर को नहीं बदलनी चाहिए

### आपकी कुंजियों का क्रम

यही वह चीज़ है जो लोगों को पकड़ लेती है। JavaScript में JSON फ़ॉर्मैटर लिखने का ज़ाहिर तरीका है `JSON.parse` पुकारना और फिर इंडेंट के साथ `JSON.stringify`, और यह जोड़ा उन कुंजियों का क्रम बचाकर नहीं रखता जो पूर्णांक जैसी दिखती हैं:

```
Object.keys(JSON.parse('{"10":"a","2":"b","x":"c"}'))
// ['2', '10', 'x']
```

यह किसी के कोड की खराबी नहीं है। JavaScript ऑब्जेक्ट का विनिर्देश ही कहता है कि पूर्णांक जैसी कुंजियाँ पहले आएँगी, बढ़ते संख्या-क्रम में, और `JSON.parse` से गुज़रने वाला हर मान JavaScript ऑब्जेक्ट बन जाता है। इस तरह बना फ़ॉर्मैटर उस फ़ाइल का क्रम बदल देगा जो id, पोर्ट नंबर, साल या HTTP स्टेटस कोड से क्रम में लगी है, और वह यह बिना एक शब्द कहे करेगा।

इससे फ़र्क पड़ता है या नहीं, यह फ़ाइल पर निर्भर है। सिद्धांत रूप में JSON ऑब्जेक्ट क्रम-रहित होते हैं, इसलिए तकनीकी रूप से कुछ टूटता नहीं। पर आपकी रिपॉज़िटरी में पड़े रूप के मुकाबले डिफ़ विशाल हो जाएगा, रिव्यू पढ़ा ही नहीं जाएगा, और अगर आगे कोई चीज़ उस फ़ाइल को क्रम से पढ़ती है, तो व्यवहार बदल जाएगा।

### आपकी संख्याओं के अंक

JSON यह कहता ही नहीं कि संख्या कितनी बड़ी हो सकती है, और JavaScript कहता है: हर संख्या एक डबल है। इसलिए जो फ़ॉर्मैटर उसे डबल में पार्स करके वापस छाप देता है, वह वह सब गँवा देता है जो डबल सँभाल नहीं सकता।

```
JSON.stringify(JSON.parse('{"id":123456789012345678901}'))
// {"id":123456789012345680000}

JSON.stringify(JSON.parse('{"size":1e999}'))
// {"size":null}
```

इक्कीस अंकों की id, चाहे वह कोई Twitter id हो, Snowflake id हो या बैंक का संदर्भ, एक अलग ही संख्या बनकर लौटती है, और डबल के लिए बहुत बड़ा मान `null` बनकर। दोनों फ़ाइलें अब भी पार्स होती हैं, और इनमें से कोई भी वह फ़ाइल नहीं है जिससे आपने शुरू किया था।

इससे बचने का रास्ता यह है कि संख्याओं को पार्स किया ही न जाए। दस्तावेज़ सजाने के लिए फ़ॉर्मैटर को बस इतना जानना है कि संख्या कहाँ शुरू होती है और कहाँ खत्म; उसका मान उसे कभी नहीं चाहिए, इसलिए सुरक्षित काम यह है कि अंक ठीक वैसे ही उतार दिए जाएँ जैसे लिखे गए थे। यहाँ का टूल यही करता है।

### आपकी दोहरी कुंजियाँ

`{"a": 1, "a": 2}` वैध JSON है, और मानक यह कहने से इनकार कर देता है कि इन दोनों में से कौन जीतेगा। व्यवहार में पार्सर आपस में सहमत नहीं हैं: ज़्यादातर आखिरी रखते हैं, कुछ पहली, और कुछ दस्तावेज़ ही मना कर देते हैं। जो फ़ॉर्मैटर चुपचाप इनमें से एक निकाल देता है, उसने आपके लिए वह फ़ैसला कर दिया है, और उस कहीं ज़्यादा काम की बात को छिपा दिया है कि वे दो थीं। यह लगभग हमेशा फ़ाइल में हुई कोई गलती होती है, और ऐसी जिसे आप देखना चाहेंगे।

## जब फ़ाइल पार्स ही न हो

जो JSON नाकाम होती है वह ज़्यादातर कोई अनोखी चीज़ नहीं होती। वह करीब छह चीज़ों में से एक होती है, और अगर त्रुटि यह ऐसे शब्दों में बताती हो जिन्हें आप ढूँढ़ सकें कि वह है कहाँ, तो वह आपको बता देती है कि कौन-सी। `position 4193` जैसा ऑफ़सेट वह नहीं है; पंक्ति और कॉलम है।

- **आखिर में लगा कॉमा।** `{"a": 1,}` JavaScript में वैध है और JSON में नहीं। सबसे आम अकेली वजह, और आम तौर पर सूची की आखिरी प्रविष्टि मिटाने से पीछे छूट जाती है।
- **इकहरे उद्धरण चिह्न।** `{'a': 1}` JavaScript का ऑब्जेक्ट लिटरल है, JSON नहीं। स्ट्रिंग और कुंजियाँ दोनों दोहरे उद्धरण चिह्नों में होती हैं, और कुंजियाँ हमेशा उद्धरण में होती हैं।
- **बिना उद्धरण वाली कुंजी।** `{a: 1}`, यानी वही गलती दूसरी तरफ़ से, और आम तौर पर किसी फ़ाइल से नहीं, कोड में से कुछ चिपकाने से।
- **टिप्पणियाँ।** `// इस तरह` भी JSON नहीं है। वह JSONC है, जिसे VS Code की सेटिंग और `tsconfig.json` इस्तेमाल करते हैं, और वह और कहीं पार्स नहीं होगी। अगर किसी टिप्पणी का बचे रहना ज़रूरी हो, तो चलन एक कुंजी का है: `"_comment": "..."`।
- **स्ट्रिंग के भीतर असली नई पंक्ति या टैब।** उन्हें `\n` और `\t` लिखना पड़ता है। जब कोई शेल कमांड या सर्टिफ़िकेट हाथ से किसी मान में चिपका दिया जाता है, तब आम तौर पर यही बिगड़ता है।
- **ऐसी संख्या जिसकी JSON इजाज़त नहीं देती।** आगे लगे शून्य (`01`), अकेला दशमलव बिंदु (`.5`), `NaN`, `Infinity` और `+1`। लोग ये सब लिखते हैं, और इनमें से कोई भी JSON नहीं है।

एक चीज़ जो त्रुटि है नहीं पर लगती है: ऐसी फ़ाइल जो बाइट-ऑर्डर मार्क से शुरू होती है। वह ज़्यादातर एडिटरों में दिखता ही नहीं, वह खाली जगह नहीं है, और वह दस्तावेज़ के सबसे पहले अक्षर को ही अप्रत्याशित बना देता है। अगर किसी बिलकुल ठीक दिखती फ़ाइल पर त्रुटि पंक्ति 1, कॉलम 1 पर है, तो वह यही है।

![वही टूल एक टूटे दस्तावेज़ के साथ: एक त्रुटि जो फ़ालतू अल्पविराम की पंक्ति और स्तंभ बताती है, और इनपुट खाने में वही दोषी पंक्ति।](https://abox.tools/screens/format-json-without-uploading-it/error.webp)

जब वह पढ़ा न जाए, संदेश बता देता है कहाँ। फ़ालतू अल्पविराम सबसे आम कारण है और आँख से सबसे मुश्किल दिखने वाला।

## निचोड़ना, और उससे आम तौर पर कितना कम मिलता है

खाली जगह निचोड़ देना उलटी दिशा में वही क्रिया है, और इससे मिलता क्या है इस बारे में यथार्थवादी रहना बनता है। खाली जगह बेहद दोहराव वाली होती है, और आपके तथा पाठक के बीच पड़ने वाला हर सर्वर और ब्राउज़र जवाब को gzip या Brotli से पहले ही कंप्रेस कर देता है, और वे ठीक इसी तरह के दोहराव में बहुत अच्छे हैं।

इसलिए निचोड़ी हुई JSON फ़ाइल के रूप में अक्सर तीस प्रतिशत छोटी होती है और तार पर सिर्फ़ कुछ प्रतिशत। जहाँ वह सचमुच अपनी कीमत वसूल करती है वे जगहें वही हैं जिनके आगे कोई कंप्रेशन है ही नहीं: डेटाबेस के किसी कॉलम में रखा मान, किसी लॉग पंक्ति का कोई खाना, QR कोड के भीतर का पेलोड, या ऐसा दस्तावेज़ जिसे आप किसी हेडर में Base64 करने वाले हैं।

इसकी कीमत पढ़े जाने लायक होना है, और अगर फ़ाइल किसी रिपॉज़िटरी में कमिट होती है तो इसकी कीमत डिफ़ भी हैं, क्योंकि एक पंक्ति वाली फ़ाइल तब पूरी की पूरी बदल जाती है जब उसमें कुछ भी बदलता है। अपने एडिटर में जाते वक्त नहीं, बाहर निकलते वक्त निचोड़िए।

## कुंजियाँ क्रम में लगाना, और कब नहीं लगाना

हर ऑब्जेक्ट की कुंजियाँ क्रम में लगाना यहाँ डिफ़ॉल्ट रूप से लागू होने के बजाय एक विकल्प के रूप में दिया गया है, क्योंकि वह फ़ाइल में असली बदलाव है और उसकी कीमत पूरी तरह इस पर टिकी है कि आप आगे करने क्या जा रहे हैं।

यह तब मदद करता है जब आप दो ऐसे दस्तावेज़ मिला रहे हों जिन्हें एक ही बात कहनी चाहिए, जैसे दो माहौलों की कॉन्फ़िगरेशन, या किसी बदलाव से पहले और बाद का API जवाब, और उनमें से एक अपनी कुंजियाँ किसी दूसरे क्रम में गिनाता हो। दोनों को पहले क्रम में लगा देने से सब कुछ का डिफ़ बदलकर उन दो पंक्तियों का डिफ़ बन जाता है जो असल में अलग हैं।

यह तब नुकसान करता है जब वह क्रम कुछ कर रहा हो। `package.json` में इस बारे में चलन हैं कि पहले क्या आता है; हाथ से लिखी कॉन्फ़िग अक्सर जुड़ी हुई सेटिंग को साथ रखती है; और जिस फ़ाइल की कुंजियाँ किसी टूल ने क्रम में लगा दीं और फिर कमिट कर दी गईं, वह एक विशाल, बेमानी कमिट बनाती है। असली नहीं, नकल क्रम में लगाइए।

एक बात जानने लायक है: यहाँ क्रम कुंजियाँ जैसे पढ़ी जाती हैं उस हिसाब से लगता है, उनके कोड पॉइंट से नहीं, इसलिए `item2`, `item10` से पहले आता है, बाद में नहीं। कोड पॉइंट से क्रम लगाना ही वह चीज़ है जो `item10` को इकाइयों के बीच में ला बिठाती है है, जो तकनीकी रूप से सही है और पाठक के किसी काम का नहीं।

## दो JSON फ़ाइलें मिलाना

भरोसेमंद तरीका यह है कि पहले दोनों को एक ही तरह से सजा लीजिए। एक ही बात कहने वाले दो दस्तावेज़ हर पंक्ति पर अलग हो सकते हैं अगर उनमें से एक निचोड़ा हुआ हो और दूसरा नहीं, और कोई भी डिफ़ उसके पार नहीं देख सकता।

तो पहली सजाइए, दूसरी सजाइए, फिर दोनों नतीजों को मिलाइए। यहाँ तीनों कदम एक ही पेज पर हैं, और *मिलाइए* टैब ठीक इसी वजह से *सजाइए* के साथ वही डिब्बा साझा करता है। अगर दोनों अपनी कुंजियाँ अलग-अलग क्रम में भी गिनाती हों, तो सजाते वक्त दोनों को क्रम में लगा दीजिए और तुलना सिमटकर वही फ़र्क रह जाती है जिसे आप ढूँढ़ रहे थे।

## वह हिस्सा जिसे कोई पेज पर नहीं लिखता

JSON फ़ॉर्मैटर खोजिए और आपको दर्जनों साइटें मिलेंगी जिन पर एक डिब्बा बना होता है। उस डिब्बे में चिपकाना एक अपलोड है। आपके क्लिपबोर्ड में जो कुछ भी था, चाहे किसी ग्राहक का पता समेटे API का जवाब, कनेक्शन स्ट्रिंग वाली कॉन्फ़िग फ़ाइल, या वह टोकन जिसे आप डीबग कर रहे थे, वह एक ऐसी मशीन को भेज दिया गया है जो आपके काबू में नहीं, और अब वह उनकी लॉग फ़ाइल है, उनकी एरर रिपोर्ट है, और उनका बैकअप है।

यह किसी बदनीयती की काल्पनिक बात नहीं है। बिलकुल नेकनीयत साइट भी ऐक्सेस लॉग रखती है, एनालिटिक्स चलाती है, और उसका भी कोई होस्टिंग प्रदाता होता है। सबसे सुरक्षित डेटा वही है जो कभी गया ही नहीं, और जो काम पूरा का पूरा लाइनों की हेर-फेर भर है, उसमें उसके जाने की कोई वजह ही नहीं।

दो जाँचें, और वे यह दावा करने वाली किसी भी साइट पर चलती हैं, सिर्फ़ इस वाली पर नहीं:

1. **DevTools खोलिए, Network टैब देखते रहिए, और कुछ सजाइए।** अगर आपका टेक्स्ट भेजा जा रहा है, तो उसे ढोती हुई एक रिक्वेस्ट मौजूद होगी। इसके साथ-साथ कोई और बात सच हो ही नहीं सकती।
2. **इंटरनेट काट दीजिए और दोबारा आज़माइए।** जो टूल काम आपके ब्राउज़र में करता है उस पर कोई असर नहीं पड़ता। जो टूल आपका टेक्स्ट कहीं भेजता है वह काम करना बंद कर देता है, तुरंत और पूरी तरह।

दोनों का लंबा रूप, दो और जाँचों के साथ, [क्या फ़ाइलें अपलोड करना सुरक्षित है](https://abox.tools/hi/guides/is-it-safe-to-upload-files/) में है।

## YAML, XML और बाकी का क्या

वही पेज XML, HTML, CSS और YAML भी पढ़ता है, और JSON तथा इनमें से पहली और आखिरी के बीच बदलाव भी करता है। ऊपर से दो बातें साथ ले आना बनता है, क्योंकि वे वही दलील हैं, बस दूसरे लिबास में:

- **YAML को JSON में बदलने पर टिप्पणियाँ खो जाती हैं**, क्योंकि JSON के पास उन्हें रखने की कोई जगह ही नहीं। ऐंकर और एलियस भी कहे ही नहीं जा सकते, जो YAML का “वही नोड दो बार” कहने का तरीका हैं, और उन्हें यहाँ अंदाज़े से समझने के बजाय मना कर दिया जाता है।
- **`no` एक स्ट्रिंग है।** YAML 1.1 में `yes`, `no`, `on` और `off` बूलियन थे, और इसीलिए नॉर्वे वाली देश-कोड सूची में कभी `false` निकल आता था। YAML 1.2 ने उसे हटा दिया और यह भी हटाता है। पर वे शब्द फिर भी उद्धरण चिह्नों में वापस लिखे जाते हैं, क्योंकि उस फ़ाइल को आगे जो भी खोलेगा वह शायद 1.1 पढ़ने वाला हो।
