JSON Formatter और Validator

Acrafto Team डेवलपर
अपडेट किया
इनपुट की प्रतीक्षा है। ऊपर JSON पेस्ट करें या .json फ़ाइल यहाँ छोड़ें।

ऊपर दिए गए फ़ील्ड में कोई भी JSON पेस्ट करें और यह JSON Formatter और Validator टाइप करते समय ही उसकी जाँच करता है। मान्य इनपुट आपके चुने हुए इंडेंट के साथ साफ़ ढंग से फ़ॉर्मेट (pretty print) हो जाता है, या एक ही लाइन में मिनिफ़ाई हो जाता है। अमान्य इनपुट पर आपको लाइन और कॉलम के साथ सटीक त्रुटि, हाइलाइट किया गया अंश और आम गलतियों के लिए एक क्लिक में सुधार मिलता है। सब कुछ आपके ब्राउज़र में चलता है, इसलिए API रिस्पॉन्स, कॉन्फ़िगरेशन फ़ाइलें और एक्सपोर्ट आपके कंप्यूटर से बाहर नहीं जाते।

यह JSON Formatter क्या करता है

  • JSON Beautify: 2 स्पेस, 4 स्पेस या टैब के इंडेंट के साथ। आउटपुट में कुंजियों का मूल क्रम बना रहता है, जब तक आप कुंजियाँ सॉर्ट करें पर टिक न करें।
  • JSON Minify: हर स्पेस और लाइन ब्रेक हटा दिया जाता है। परिणाम के नीचे दिखने वाला साइज़ बताता है कि आपने कितने बाइट बचाए।
  • JSON Validate: RFC 8259 के अनुसार लाइव जाँच, जो JSON का वर्तमान मानक है। दस्तावेज़ सही होते ही स्टेटस लाइन हरी हो जाती है।
  • आम त्रुटियों का अपने आप सुधार: ट्रेलिंग कॉमा, सिंगल कोट्स, बिना कोट्स वाली कुंजियाँ, कमेंट, Python शैली के True, None और NaN, और .5 या +1 जैसी संख्याएँ।
  • फ़ाइलें लोड करें: फ़ाइल खोलें बटन से या .json फ़ाइल को इनपुट पर ड्रॉप करके। फिर परिणाम डाउनलोड करें या उसे दोबारा इनपुट में भेजकर एक और बार प्रोसेस करें।

JSON Validator: त्रुटि संदेश लाल रंग से ज़्यादा क्यों मायने रखता है

ज़्यादातर ऑनलाइन validator बस इतना बताते हैं कि कुछ गलत है। ब्राउज़र भी इससे बहुत बेहतर नहीं हैं। Chrome में JSON.parse रिपोर्ट करता है Unexpected token } in JSON at position 148, जबकि Firefox कहता है expected property name or '}', और दोनों में से कोई नहीं बताता कि किस लाइन को देखना है। इस टूल का अपना पार्सर है, जो याद रखता है कि हर टोकन कहाँ से शुरू होता है। जहाँ वह रुकता है, वहाँ आपको लाइन और कॉलम मिलते हैं, उस लाइन का एक अंश जिसमें गलत वर्ण के नीचे कैरेट (^) लगा होता है, और सरल भाषा में एक संकेत, जैसे शायद दो प्रॉपर्टी के बीच कॉमा छूट गया है। त्रुटि पर जाएँ बटन कर्सर को सीधे इनपुट में उसी स्थान पर ले जाता है।

पेस्ट किए गए दस्तावेज़ों में हमें सबसे ज़्यादा ये गलतियाँ दिखती हैं:

इनपुटसमस्यासही JSON
{'name': 'Ada'}सिंगल कोट्स{"name": "Ada"}
{name: "Ada"}बिना कोट्स की कुंजी{"name": "Ada"}
[1, 2, 3,]ट्रेलिंग कॉमा[1, 2, 3]
{"a": 1 "b": 2}छूटा हुआ कॉमा{"a": 1, "b": 2}
{"ok": True}Python लिटरल{"ok": true}
{"x": 007}शुरुआत में शून्य{"x": 7} या {"x": "007"}
// commentकमेंटJSON में अनुमति नहीं

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

बड़ी संख्याएँ, कुंजियों का क्रम और दूसरी चीज़ें जो अक्सर बिगड़ जाती हैं

कई formatter पहले JSON.parse और फिर JSON.stringify कॉल करके काम करते हैं। यह राउंड ट्रिप चुपचाप डेटा को नुकसान पहुँचाता है। 1234567890123456789 जैसी Twitter या Snowflake ID, JavaScript संख्याओं की 2^53 की सीमा से बड़ी है और 1234567890123456800 बनकर लौटती है। मान 1.0 बदलकर 1 हो जाता है, और 1e3 बदलकर 1000। यह formatter संख्याओं को कभी फ़्लोटिंग पॉइंट में नहीं बदलता। यह हर लिटरल को ठीक वैसे ही कॉपी करता है जैसे वह लिखा गया था, इसलिए आउटपुट इनपुट की सटीक री-फ़ॉर्मेटिंग है, उसकी नई व्याख्या नहीं। स्ट्रिंग के अंदर एस्केप सीक्वेंस पर भी यही लागू होता है। "\u00e9" वैसा ही "\u00e9" रहता है और "é" में नहीं बदलता।

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

JSON format बनाम JSON minify: कब कौन सा इस्तेमाल करें

Pretty print किया गया JSON इंसानों के लिए है। इसका उपयोग तब करें जब आप किसी API रिस्पॉन्स की समीक्षा करते हैं, package.json, tsconfig.json या कोई OpenAPI दस्तावेज़ लिखते हैं, या रिपॉज़िटरी में फ़िक्स्चर रखते हैं जहाँ diff में हर लाइन पर एक ही बदलाव दिखना चाहिए। JavaScript की दुनिया में 2 स्पेस का चलन है, Python और .NET प्रोजेक्ट में 4 स्पेस आम हैं, और टैब हर पाठक को अपनी पसंद की चौड़ाई चुनने देते हैं।

Minified JSON मशीनों के लिए है। फ़ॉर्मेट किए गए दस्तावेज़ का आमतौर पर 20 से 40 प्रतिशत हिस्सा व्हाइटस्पेस होता है। इसे हटाने से ब्राउज़र को भेजे जाने वाले पेलोड, Redis या डेटाबेस कॉलम में रखे गए मान, और HTML में एम्बेड किए गए data-* एट्रिब्यूट छोटे हो जाते हैं। gzip इस अंतर का कुछ हिस्सा कम कर देता है, लेकिन minified संस्करण कंप्रेस होने के बाद भी छोटा रहता है। परिणाम के नीचे दिखने वाला साइज़ आपके दस्तावेज़ के लिए सटीक अंतर बताता है।

टर्मिनल और एडिटर में JSON के साथ काम करना

जिन फ़ाइलों को आप बार-बार प्रोसेस करते हैं, उनके लिए कमांड लाइन टूल किसी भी वेबसाइट से तेज़ है। jq . file.json फ़ाइल को pretty print करता है, jq -c . file.json उसे minify करता है, और python -m json.tool file.json हर उस मशीन पर काम करता है जहाँ Python इंस्टॉल है। Visual Studio Code में Shift+Alt+F दबाने पर JSON फ़ॉर्मेट हो जाता है, और $schema प्रॉपर्टी जोड़ने पर एडिटर उसे स्कीमा के अनुसार वैलिडेट भी करता है। यह पेज बाकी मामलों के लिए है, जैसे नेटवर्क टैब से कॉपी किया गया रिस्पॉन्स, कोई लॉग लाइन, विकी से लिया गया कॉन्फ़िगरेशन का टुकड़ा, या ऐसी मशीन पर तुरंत जाँच जहाँ आप कुछ इंस्टॉल नहीं कर सकते।

इस साइट के संबंधित टूल: Base64 एन्कोडर और डिकोडर JWT के पेलोड वाले हिस्से को डिकोड करता है, जो Base64url में एन्कोड किया गया JSON होता है। UNIX टाइमस्टैम्प कनवर्टर ज़्यादातर API रिस्पॉन्स में मिलने वाली createdAt संख्याओं को पढ़ने योग्य तारीखों में बदलता है, और UUID डिकोडर आपके डेटा में मौजूद पहचानकर्ताओं का संस्करण और टाइमस्टैम्प बताता है। और भी टूल डेवलपर टूल श्रेणी में मिलेंगे।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

क्या मेरा JSON किसी सर्वर पर अपलोड होता है? नहीं। पार्सिंग, फ़ॉर्मेटिंग और सुधार पूरी तरह आपके ब्राउज़र में JavaScript में चलते हैं। पेज लोड होने के बाद आप इंटरनेट बंद कर सकते हैं और टूल काम करता रहेगा। कुछ भी लॉग या सेव नहीं किया जाता।
मेरा एडिटर कमेंट स्वीकार करता है, तो validator उन्हें क्यों अस्वीकार करता है? JSON के निर्माता Douglas Crockford ने कमेंट को जानबूझकर JSON से हटाया था, ताकि इस फ़ॉर्मेट का उपयोग पार्सर निर्देशों के लिए न किया जाए। tsconfig.json या .vscode/settings.json जैसी फ़ाइलें तकनीकी रूप से JSONC होती हैं, जो JSON का एक विस्तारित रूप है और जिसे एडिटर सपोर्ट करते हैं। API, डेटाबेस और ज़्यादातर प्रोग्रामिंग भाषाओं के सख्त पार्सर कमेंट को अस्वीकार करते हैं। ठीक करने वाला बटन कमेंट हटा देता है, ताकि परिणाम हर जगह मान्य हो।
क्या मैं JSON Lines या एक साथ कई ऑब्जेक्ट फ़ॉर्मेट कर सकता हूँ? एक JSON दस्तावेज़ में ठीक एक मान होता है। अगर आप कॉमा या लाइन ब्रेक से अलग किए गए कई ऑब्जेक्ट पेस्ट करते हैं, तो validator पहले अतिरिक्त मान पर रुक जाता है। उन्हें स्क्वेयर ब्रैकेट में लपेटकर ऐरे बनाएँ, फिर फ़ॉर्मेट करें। ठीक करने वाला बटन यह अपने आप नहीं करता, क्योंकि वह यह नहीं जान सकता कि इनपुट को एक ही दस्तावेज़ होना था या नहीं।
अधिकतम साइज़ कितना है? कोई तय सीमा नहीं है। कुछ मेगाबाइट के दस्तावेज़ लैपटॉप पर एक सेकंड से काफ़ी कम समय में फ़ॉर्मेट हो जाते हैं। पेज को तेज़ बनाए रखने के लिए लगभग 400 kB से ऊपर सिंटैक्स हाइलाइटिंग बंद हो जाती है, लेकिन कॉपी और डाउनलोड तब भी काम करते हैं।
क्या कुंजियाँ सॉर्ट करने से डेटा बदल जाता है? नहीं। परिभाषा के अनुसार JSON ऑब्जेक्ट में सदस्यों का कोई क्रम नहीं होता, देखें विकिपीडिया पर JSON का लेख। इसलिए पार्सर सॉर्ट किए गए और मूल दस्तावेज़ को एक ही मान के रूप में पढ़ता है। ऐरे का क्रम कभी नहीं बदला जाता, क्योंकि उनका क्रम डेटा का हिस्सा है।
किसी स्ट्रिंग में एम्बेड करने के लिए JSON को एस्केप कैसे करें? पहले minify करें, फिर हर बैकस्लैश और डबल कोट को एस्केप करें। कई भाषाएँ यह सुविधा सीधे देती हैं। JavaScript में JSON.stringify(JSON.stringify(obj)) या Python में json.dumps(json.dumps(obj)) एक JSON स्ट्रिंग बनाते हैं जिसके अंदर JSON टेक्स्ट होता है।

मैं सराहना करूंगा यदि आप इन पृष्ठों को मित्रों के साथ साझा कर सकें, उन्हें बुकमार्क कर सकें या उनसे लिंक कर सकें। धन्यवाद! 🙏