डेवलपर टूल · JSON फ़ॉर्मेटर और सत्यापनकर्ता
JSON स्ट्रिंग एस्केप की व्याख्या: \n, \uXXXX और नियंत्रण वर्ण
· यह काम किस प्रकार करता है
json डेवलपर-वर्कफ़्लो मान्यकरण
JSON स्ट्रिंग के अंदर एक कच्ची नई पंक्ति अमान्य है, और एक टैब भी अमान्य है। यह पोस्ट आठ एस्केप अनुक्रमों को कवर करती है, \u एस्केप और सरोगेट जोड़े कैसे काम करते हैं, और क्यों एक चिपकाया गया पैराग्राफ पूरी फ़ाइल को अमान्य कर सकता है।
वह पैराग्राफ जिसने पेलोड को तोड़ दिया
वह पैराग्राफ जिसने पेलोड को तोड़ दिया - एक उद्धृत विवरण में एक दृश्यमान लाइन ब्रेक को चिपकाने से एक नियंत्रण वर्ण सीधे JSON स्ट्रिंग में सम्मिलित हो जाता है। पहली पंक्ति पूर्ण दिखती है, लेकिन प्रारंभिक उद्धरण अभी भी स्ट्रिंग सामग्री या समापन उद्धरण की अपेक्षा करता है। जब पार्सर कच्ची लाइन फ़ीड पर पहुंचता है, तो यह वहीं रुक जाता है क्योंकि JSON स्ट्रिंग्स भौतिक रेखाओं को उस तरह से नहीं फैला सकती हैं। पाठ में दो-वर्ण का एस्केप `\n` होना चाहिए, जहां भी डिकोड किए गए मान को एक नई पंक्ति की आवश्यकता हो।
किसी दस्तावेज़ या स्प्रेडशीट से कॉपी किए गए टैब समान कैटेगरी की विफलता का कारण बनते हैं, भले ही एक एडिटर उन्हें हानिरहित रिक्ति के रूप में प्रस्तुत कर सकता है। शाब्दिक टैब को `\t` से बदलें, कैरिज रिटर्न को `\r` से बदलें और अन्य निषिद्ध नियंत्रणों को उनके नामित या यूनिकोड एस्केप से बदलें।
आठ पलायन JSON अनुमति देते हैं
आठ भाग जाते हैं JSON अनुमति देता है - बैकस्लैश के बाद, संक्षिप्त रूप हैं `"`, `\\`, `\/`, `\b`, `\f`, `\n`, `\r` और `\t`. वे उद्धरण चिह्न, बैकस्लैश, स्लैश, बैकस्पेस, फॉर्म फ़ीड, लाइन फ़ीड, कैरिएज रिटर्न और क्षैतिज टैब का प्रतिनिधित्व करते हैं। एक स्लैश अनचाहा भी दिखाई दे सकता है; `\/` मुख्य रूप से उन संदर्भों के साथ संगतता के लिए मौजूद है जो एक बार समापन स्क्रिप्ट अनुक्रम को विशेष रूप से मानते थे।
कोई अन्य पत्र JSON बैकस्लैश का अनुसरण नहीं कर सकता। प्रोग्रामिंग भाषाओं से परिचित अनुक्रम, जैसे `\v`, `\0`, `\x41` या भौतिक न्यूलाइन के बाद बैकस्लैश, यहां अमान्य हैं। जब कोई शॉर्ट एस्केप मौजूद न हो तो `\u` के बाद ठीक चार हेक्साडेसिमल अंकों का उपयोग करें। यह छोटी निश्चित शब्दावली JSON स्ट्रिंग्स को पोर्टेबल रखती है: उपभोक्ता को वैध पाठ द्वारा दर्शाए गए वर्णों को निर्धारित करने के लिए JavaScript, पायथन या शेल-विशिष्ट एस्केप नियमों की आवश्यकता नहीं होती है।
क्यों एक शाब्दिक टैब अमान्य है लेकिन एक शाब्दिक é ठीक है
क्यों एक शाब्दिक टैब अमान्य है लेकिन एक शाब्दिक é ठीक है - JSON स्ट्रिंग के अंदर U+0000 से U+001F तक अनएस्केप्ड कोड बिंदुओं को रोकता है। उस कैटेगरी में टैब, न्यूलाइन और अन्य नियंत्रण शामिल हैं जिनके अदृश्य प्रभाव फ़्रेमिंग या डिस्प्ले को बाधित कर सकते हैं। अक्षर `é` U+00E9 है, जो नियंत्रण सीमा से काफी बाहर है, इसलिए UTF-8 JSON इसे सीधे उद्धरण चिह्नों के बीच शामिल कर सकता है। अधिकांश लिपियों, प्रतीकों और इमोजी के लिए भी यही सच है।
इसलिए सामान्य यूनिकोड से बचना वैकल्पिक है, स्वच्छता की आवश्यकता नहीं। `"café"` और `"caf\u00e9"` वर्णों के समान अनुक्रम को डिकोड करते हैं। प्रत्यक्ष पाठ आमतौर पर लोगों के लिए पढ़ना आसान होता है, जबकि एस्केप ASCII-केवल परिवहन में मदद कर सकते हैं या एक विशिष्ट कोड इकाई को दृश्यमान बना सकते हैं। नियंत्रण वर्ण भिन्न हैं: उनका बचना अनिवार्य है।
\uXXXX एस्केप कैसे काम करता है
`\uXXXX` कैसे काम से बच जाता है - `u` के बाद ठीक चार हेक्साडेसिमल अंक होने चाहिए, किसी भी स्थिति में 0–9 या A-F का उपयोग करना चाहिए। `\u00E9` `é` के लिए UTF-16 कोड इकाई का प्रतिनिधित्व करता है, और `\u000A` एक लाइन फ़ीड का प्रतिनिधित्व करता है। कम अंक, ब्रेसिज़ जैसे `\u{1F600}` या एक गैर-हेक्साडेसिमल अक्षर JSON को अमान्य बनाते हैं, भले ही कोई अन्य प्रोग्रामिंग भाषा उस नोटेशन को स्वीकार करती हो।
U+FFFF से ऊपर के वर्णों को इस एस्केप फॉर्म में सरोगेट जोड़ी के रूप में दर्शाया गया है। इमोजी 😀 को `\uD83D\uDE00` के रूप में लिखा जा सकता है: एक यूनिकोड स्केलर मान में पार्स करने के बाद उच्च और निम्न सरोगेट संयोजन। JSON व्याकरण एक अयुग्मित सरोगेट एस्केप ले सकता है, लेकिन डाउनस्ट्रीम एनकोडर और एप्लिकेशन इसे अस्वीकार या प्रतिस्थापित कर सकते हैं क्योंकि यह पूर्ण यूनिकोड वर्ण की पहचान नहीं करता है।
कारगर उदाहरण: विंडोज़ पथ और HTML के स्निपेट से बचना
व्यावहारिक उदाहरण: विंडोज़ पथ और HTML के स्निपेट से बचना - इच्छित पथ `C:\Temp\report.txt` को JSON स्रोत: `"C:\\Temp\\report.txt"` में प्रत्येक बैकस्लैश को दोगुना करने की आवश्यकता है। दोहरीकरण के बिना, `\T` एक अमान्य एस्केप है और `\r` या `\t` जैसे अनुक्रम चुपचाप पथ विभाजक के बजाय नियंत्रण वर्ण बन सकते हैं। इच्छित मान से JSON बनाएं, यह अनुमान लगाकर नहीं कि कौन से प्रदर्शित स्लैश पहले से ही किसी बाहरी भाषा से संबंधित हैं।
एक HTML टुकड़ा जैसे `<a title="Report">Open</a>` अपने कोण कोष्ठक रख सकता है और शाब्दिक रूप से स्लैश कर सकता है, लेकिन विशेषता उद्धरण JSON स्ट्रिंग के अंदर `\"` बनना चाहिए। यदि कोई नई पंक्ति दो टैग को अलग करती है, तो उसे `\n` के रूप में एन्कोड करें। परिणामी JSON सदस्य को सत्यापित किया जा सकता है और मूल HTML पाठ पर वापस पार्स किया जा सकता है।
जहां पलायन दोगुना हो जाता है
जहां पलायन दोगुना हो जाता है - प्रत्येक संलग्न पाठ व्याकरण को बैकस्लैश की व्याख्या करने का अपना मौका मिलता है। डिकोडेड स्ट्रिंग `line1\nline2` वाले JSON दस्तावेज़ को उस बैकस्लैश से बचना होगा, जिससे `"line1\\nline2"` उत्पन्न होगा। यदि वह JSON टेक्स्ट स्वयं JSON स्ट्रिंग के रूप में संग्रहीत है, तो उसके उद्धरण और दोनों बैकस्लैश को भागने की एक और परत की आवश्यकता होती है। स्पष्ट अव्यवस्था कई अभ्यावेदन को रिकॉर्ड करती है, न कि JSON का कोई विशेष विस्तारित रूप।
JSON पार्सर द्वारा तर्क देखने से पहले शेल और प्रोग्रामिंग-भाषा शाब्दिक अपने स्वयं के उद्धरण नियम जोड़ते हैं। अंदर से बाहर तक निदान करें: पहले सटीक डिकोडेड मान लिखें, इसे एक बार JSON के रूप में एन्कोड करें, फिर आसपास के शेल या स्रोत भाषा के लिए उस पूर्ण JSON टेक्स्ट को एन्कोड करें। प्रत्येक सीमा पर, निरीक्षण करें कि अगला पार्सर वास्तव में कौन से बाइट्स या वर्ण प्राप्त करता है।
इसमें क्या शामिल नहीं है
इसमें क्या शामिल नहीं है - HTML इकाइयां जैसे `"` और URL प्रतिशत-एन्कोडिंग जैसे `%20` अलग वाक्यात्मक संदर्भों के लिए अलग-अलग परिवर्तन हैं। JSON पार्सर किसी भी फॉर्म को डीकोड नहीं करता है। स्ट्रिंग `"""` में पार्सिंग के बाद छह शाब्दिक वर्ण होते हैं, उद्धरण चिह्न नहीं, और `"%20"` में एक प्रतिशत चिह्न होता है जिसके बाद दो अंक होते हैं, कोई स्थान नहीं। उन एन्कोडिंग को केवल तभी लागू करें जब डेटा HTML या URL घटक में चला जाए।
यह चर्चा आउटपुट एन्कोडिंग को भी प्रतिस्थापित नहीं करती है। किसी अविश्वसनीय स्रोत से प्राप्त वैध JSON में अभी भी सामान्य स्ट्रिंग डेटा के रूप में HTML, स्क्रिप्ट-जैसे टेक्स्ट या टर्मिनल नियंत्रण अनुक्रम शामिल हो सकते हैं। जो एप्लिकेशन बाद में किसी कमांड को रेंडर या निष्पादित करता है, उसे उस गंतव्य को सुरक्षित रूप से संभालना चाहिए। JSON भागने से JSON संरचना की सुरक्षा होती है; यह सार्वभौमिक स्वच्छता नहीं है।
टेकअवे: व्याकरण जो मना करता है उससे बचें, इससे अधिक कुछ नहीं
टेकवे: व्याकरण जो मना करता है उससे बचें, और कुछ नहीं - डबल कोट्स, बैकस्लैश और U+0020 के नीचे कोड बिंदुओं पर JSON स्ट्रिंग्स के अंदर ध्यान देने की आवश्यकता है। साधारण यूनिकोड पठनीय रह सकता है, जबकि `\uXXXX` सटीक चार अंकों का विकल्प प्रदान करता है और सरोगेट जोड़े U+FFFF से ऊपर के वर्णों का प्रतिनिधित्व करते हैं। स्पष्ट रूप से रिक्त स्थिति पर एक निदान अक्सर एक शाब्दिक न्यूलाइन, टैब या अन्य नियंत्रण चरित्र की पहचान करता है जिसे इसके पाठ्य एस्केप के साथ प्रतिस्थापित किया जाना चाहिए।
स्लैश को देखकर गिनने के बजाय एन्कोडिंग परतों की गिनती करें। एप्लिकेशन को प्राप्त होने वाले मान से प्रारंभ करें, इसे JSON के लिए एक बार एन्कोड करें और उसके बाद ही परिणामी दस्तावेज़ को किसी बाहरी शेल, स्रोत फ़ाइल या दूसरी JSON स्ट्रिंग के लिए उद्धृत करें। JSON पार्सर में प्रस्तुत पाठ को सत्यापित करें और, जब शुद्धता मायने रखती है, तो बाद में डिकोडेड स्ट्रिंग का निरीक्षण करें।