JSON स्ट्रिंग एस्केप / अनएस्केप
JSONJSON स्ट्रिंग्स को एस्केप और अनएस्केप करें — उद्धरण, नियंत्रण वर्ण और \uXXXX।
इस पृष्ठ पर
JSON स्ट्रिंग एस्केपिंग क्या है?#
किसी JSON दस्तावेज़ के भीतर एक स्ट्रिंग को दोहरे उद्धरण चिह्नों के बीच रखा जाना चाहिए — और तभी समस्या खड़ी हो जाती है जब टेक्स्ट में खुद एक उद्धरण, एक न्यूलाइन, या एक बैकस्लैश आ जाए। यदि आप इन्हें कच्चे रूप में डाल दें, तो पार्सर समाप्ति का उद्धरण बहुत जल्दी समझ बैठेगा, या \ को किसी ऐसे एस्केप की शुरुआत मान लेगा जिसे वह नहीं पहचानता। एस्केपिंग इन वर्णों को JSON विनिर्देश द्वारा परिभाषित छोटे बैकस्लैश अनुक्रमों से बदलने की क्रिया है: उद्धरण के लिए \", बैकस्लैश के लिए \\, न्यूलाइन के लिए \n, टैब के लिए \t, और कुछ और। अनएस्केपिंग इसका उल्टा है — इन अनुक्रमों को वापस मूल वर्णों में बदलना।
एक दूसरा, और कठोर मोड भी है। कुछ विरासती प्रणालियाँ — पुराने लॉग शिपर, प्रतिबंधात्मक डेटाबेस, ऐसे ट्रांज़िट स्तर जो शुद्ध ASCII मानते हैं — 127 से ऊपर के हर बाइट पर अटक जाती हैं। उनके लिए, JSON आपको किसी भी non-ASCII वर्ण को \uXXXX के रूप में लिखने की छूट देता है (और इमोज़ी जैसे अस्ट्रल वर्णों को UTF-16 सरोगेट युग्म के रूप में)। टेक्स्ट अब भी मान्य JSON ही है; बस एस्केपिंग के बाद वह पूरी तरह ASCII से बन जाता है।
यह पृष्ठ दोनों दिशाओं और दोनों मोड में काम करता है: किसी कच्ची स्ट्रिंग को मान्य JSON स्ट्रिंग लिटरल में एस्केप करना, या किसी लिटरल को वापस उसके मूल टेक्स्ट में अनएस्केप करना — साथ ही एक वैकल्पिक केवल ASCII आउटपुट (\uXXXX) स्विच जो हर non-ASCII कोडपॉइंट को बाध्य रूप से \uXXXX रूप में बदल देती है।
इसका उपयोग कैसे करें#
- टूलबार के ऊपरी-बाएँ हिस्से में एन्कोड / डिकोड टॉगल से दिशा चुनें। एन्कोड कच्चे टेक्स्ट को JSON लिटरल में एस्केप करता है; डिकोड किसी लिटरल को वापस टेक्स्ट में अनएस्केप करता है।
- बाईं ओर इनपुट पैन में टाइप करें या पेस्ट करें।
- एन्कोड में पूरा टेक्स्ट एक JSON स्ट्रिंग लिटरल बन जाता है (चारों ओर के उद्धरण सहित)।
- डिकोड में आप या तो एक उद्धरण-युक्त लिटरल (
"a\nb") पेस्ट कर सकते हैं या केवल कच्ची एस्केप्ड बॉडी (a\nb) — टूल उसे आपके लिए उद्धरणों में लपेट देता है। कोई मान्य JSON संख्या, बूलियन, या ऑब्जेक्ट “स्ट्रिंग नहीं” कहकर अस्वीकार कर दिया जाता है, चुपचाप स्वीकार नहीं किया जाता।
- केवल ASCII आउटपुट (\uXXXX) (एन्कोड मोड) तब टिक करें जब डाउनस्ट्रीम उपभोक्ता non-ASCII बाइट्स को संभाल न सके। इमोज़ी जैसे अस्ट्रल वर्ण ठीक वैसे ही उचित सरोगेट युग्म के रूप में सामने आते हैं जैसे
JSON.stringifyकरता है। - परिणाम आउटपुट पैन में लाइव दिखता है। उसे लेने के लिए कॉपी क्लिक करें।
- नमूना एक बहुभाषी प्रदर्शन स्ट्रिंग डालता है; साफ़ करें दोनों पैन रीसेट करता है।
मुख्य विशेषियाँ#
- विनिर्देश-सटीक शॉर्ट फ़ॉर्म। ठीक वही अनुक्रम उपयोग करता है जिनकी RFC 8259 माँग करती है (
\",\,\b,\f,\n,\r,\t) और 0x20 के नीचे बाकी सब के लिए\uXXXX—JSON.stringifyसे बाइट-दर-बाइट मेल खाता है। - वास्तविक केवल-ASCII मोड। Non-ASCII वर्ण चुपचाप नहीं गिराए जाते या मोजिबाके नहीं कर दिए जाते; प्रत्येक को
\uXXXXके रूप में निकाला जाता है, और अस्ट्रल वर्ण (U+FFFF से ऊपर) सही UTF-16 सरोगेट युग्म बनते हैं, न कि कोई टूटा हुआ एकल कोड यूनिट जिसे डिकोडर अस्वीकार कर दें। - सहिष्णु अनएस्केप। पूर्ण उद्धरण-युक्त लिटरल और कच्ची एस्केप्ड बॉडी दोनों स्वीकार करता है, इसलिए किसी लॉग पंक्ति से आधा-पेस्ट टुकड़ा भी त्रुटि देने के बजाय डिकोड हो जाता है।
- अनुमान लगाने से इनकार। यदि डिकोड किया गया इनपुट मान्य JSON है पर स्ट्रिंग नहीं (जैसे कच्ची संख्या या सरणी), तो टूल आपको ऐसा ही बताता है, पीठ पीछे उसे स्ट्रिंगइफ़ाय नहीं कर देता।
कार्यरत उदाहरण#
एन्कोड मोड में नमूना लोड करें — इनपुट एक ऐसी स्ट्रिंग है जिसमें जानबूझकर उद्धरण, बैकस्लैश पाथ, न्यूलाइन, कॉपीराइट चिह्न, इमोज़ी, और चीनी भाषा मिले हैं:
He said "hi"
\path\ © 🌍 你好
केवल ASCII के बिना, एस्केप किया गया लिटरल पढ़ने-योग्य वर्णों को ज्यों का त्यों रखता है और केवल जिन्हें कोट करना ज़रूरी है उन्हें कोट करता है:
"He said \"hi\"\n\\path\\ © 🌍 你好"
अब केवल ASCII आउटपुट (\uXXXX) टिक करें और वही इनपुट शुद्ध ASCII बन जाता है — कॉपीराइट चिह्न चार-वर्ण रूप \u00a9 में सिकुड़ जाता है, ग्लोब इमोज़ी सरोगेट युग्म \ud83c\udf0d में, और हर चीनी अक्षर अपने-अपने कोडपॉइंट (\u4f60, \u597d) में:
"He said \"hi\"\n\\path\\ \u00a9 \ud83c\udf0d \u4f60\u597d"
डिकोड पर स्विच करें और इनमें से किसी भी लिटरल को वापस पेस्ट करें: मूल टेक्स्ट — इमोज़ी और चीनी भाषा सहित — बिल्कुल वैसा ही बहाल हो जाता है।
अक्सर पूछे जाने वाले प्रश्न#
इमोज़ी एक के बजाय दो \u कोड क्यों बन जाता है?#
U+FFFF से ऊपर के वर्ण (इमोज़ी, दुर्लभ CJK एक्सटेंशन, कुछ गणितीय चिह्न) एकल 16-बिट कोड यूनिट में समाते नहीं, इसलिए UTF-16 उन्हें एक सरोगेट युग्म — एक उच्च सरोगेट और उसके बाद एक निम्न सरोगेट — के रूप में दर्शाता है। ग्लोब इमोज़ी 🌍 (U+1F30D) \ud83c\udf0d बन जाता है। केवल एक \u निकालना अमान्य JSON पैदा करता जिसे सख़्त डिकोडर अस्वीकार करते हैं; यह टूल युग्म को ठीक वैसे ही निकालता है जैसे JSON.stringify करता है, इसलिए आउटपुट राउंड-ट्रिप होता है।
डिकोड कहता है “Input is not a JSON string.” मैंने क्या पेस्ट किया?#
आपने कुछ ऐसा पेस्ट किया जो मान्य JSON है पर स्ट्रिंग नहीं — आमतौर पर एक कच्ची संख्या (42), बूलियन (true), या ऑब्जेक्ट/सरणी। टूल उसे स्ट्रिंगइफ़ाय करने से इनकार करता है क्योंकि इससे एक असली गलती छुप जाएगी (आप लगभग निश्चित रूप से स्ट्रिंग मान पेस्ट करना चाहते थे, पूरा दस्तावेज़ नहीं)। अपने टेक्स्ट को उद्धरणों में लपेटें और पुनः प्रयास करें।
क्या यह शाब्दिक टैब या बेल जैसे नियंत्रण वर्णों को संभालता है?#
हाँ। इनपुट में एक शाब्दिक टैब \t बन जाता है, बैकस्पेस \b, फ़ॉर्म फ़ीड \f, कैरिज रिटर्न \r; U+0020 के नीचे कोई भी और नियंत्रण कोड (बेल, 0x07 सहित) \u0007-शैली कोड बन जाता है। इसका महत्व इसलिए है क्योंकि शुद्ध नियंत्रण वर्ण JSON स्ट्रिंग्स के भीतर अवैध होते हैं और कुछ पार्सर उन्हें सीधे अस्वीकार कर देते हैं।
क्या केवल-ASCII आउटपुट “अधिक सुरक्षित” है?#
केवल एक विशिष्ट प्रकार की सुरक्षा के लिए: ऐसे ट्रांज़िट स्तर से बचना जो non-ASCII बाइट्स को बिगाड़ता या अस्वीकार करता है। यह कोई सुरक्षा उपाय नहीं है — डेटा अब भी सरलता उलटा-योग्य है, बस अधिक प्रतिबंधात्मक वर्णमाला में व्यक्त किया गया है। इसका उपयोग तब करें जब कोई उपभोक्ता ASCII ज़िद करता हो; अन्यथा बंद रखें, क्योंकि पढ़ने-योग्य रूप डिबग करना बहुत आसान होता है।