हिन्दी

डेवलपर टूल · JSON फ़ॉर्मेटर और सत्यापनकर्ता

अदृश्य वर्ण जो JSON को तोड़ते हैं: BOM, स्मार्ट उद्धरण और NBSP

· यह काम किस प्रकार करता है

json डेवलपर-वर्कफ़्लो मान्यकरण

अदृश्य वर्ण जो JSON को तोड़ते हैं: BOM, स्मार्ट उद्धरण और NBSP को JSON टोकन और एक सटीक सत्यापन सीमा के साथ चित्रित किया गया है
मूल ToolAcre वेक्टर चित्रण

जब सत्यापनकर्ता पहले वर्ण में त्रुटि की रिपोर्ट करता है और फ़ाइल सही दिखती है, तो आमतौर पर एक अदृश्य चरित्र को दोष दिया जाता है। यह पोस्ट बाइट ऑर्डर चिह्न, टाइपोग्राफ़िक उद्धरण और नॉन-ब्रेकिंग स्पेस और प्रत्येक की रिपोर्ट कैसे की जाती है, इसकी व्याख्या करती है।

लाइन 1, कॉलम 1, देखने में कुछ भी गलत नहीं है

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

किसी ऐसे ब्रेस को न हटाएं जो केवल इसलिए सही दिखता है क्योंकि उसके बगल में कैरेट दिखाई देता है। रिपोर्ट किए गए ऑफसेट पर कोड बिंदु का निरीक्षण करें, दृश्यमान रिक्त स्थान सक्षम करें या हेक्साडेसिमल दृश्य पर स्विच करें। ToolAcre पार्सिंग से पहले अग्रणी BOM को चुपचाप नहीं हटाता है, और इसका स्कैनर पहले अप्रत्याशित चरित्र की रिपोर्ट करता है।

UTF-8 बाइट ऑर्डर चिह्न

UTF-8 बाइट ऑर्डर मार्क - बाइट अनुक्रम EF BB BF फ़ाइल की शुरुआत में U+FEFF पर डिकोड होता है। UTF-8 में बाइट क्रम अस्पष्ट नहीं है, इसलिए चिह्न अनावश्यक है, लेकिन कुछ एडिटर और निर्यात टूल अभी भी इसे एन्कोडिंग हस्ताक्षर के रूप में जोड़ते हैं। RFC 8259 का कहना है कि JSON जेनरेटर को नेटवर्क वाले JSON में BOM नहीं जोड़ना चाहिए, हालांकि पार्सर्स इंटरऑपरेबिलिटी के लिए किCAक को अनदेखा करना चुन सकते हैं। सभी टूलों में उस सहिष्णुता की कल्पना नहीं की जा सकती।

JavaScript स्ट्रिंग में, BOM एक वर्ण है, भले ही इसका UTF-8 प्रतिनिधित्व तीन बाइट्स का उपयोग करता है। ToolAcre स्ट्रिंग वर्णों में स्थिति की रिपोर्ट करता है, इसलिए पंक्ति 1, कॉलम 1 पर एक प्रमुख चिह्न दिखाई देता है। BOM के बिना UTF-8 को सहेजने के लिए एडिटर को कॉन्फ़िगर करें या फ़ाइल को वितरित करने से पहले U+FEFF को हटा दें।

वर्ड प्रोसेसर से स्मार्ट उद्धरण

वर्ड प्रोसेसर से स्मार्ट उद्धरण - टाइपोग्राफ़िक उद्घाटन और समापन चिह्न गद्य में पॉलिश दिखते हैं, लेकिन JSON स्ट्रिंग सीमांकक के रूप में केवल ASCII उद्धरण चिह्न U+0022 को पहचानता है। U+201C और U+201D सामान्य यूनिकोड वर्ण हैं। एक स्ट्रिंग के बाहर, वे एक संपत्ति का नाम या मूल्य शुरू नहीं कर सकते हैं, इसलिए सत्यापनकर्ता स्मार्ट उद्धरण की रिपोर्ट स्वयं करता है। चैट, ईमेल या दस्तावेज़ एडिटर में स्वत: सुधार अक्सर JSON के मूल रूप से मान्य होने के बाद परिवर्तन प्रस्तुत करता है।

सीमांकक को सीधे दोहरे उद्धरण चिन्हों से बदलें, फिर मान से संबंधित एपोस्ट्रोफ और उद्धरण चिह्नों की जांच करें। घुंघराले उद्धरण सही ढंग से सीमांकित JSON स्ट्रिंग के अंदर सामग्री के रूप में पूरी तरह से कानूनी हैं, जैसे `"She said “go”"`; वे तभी असफल होते हैं जब उन्हें सीमांकक का व्याकरणिक कार्य करने के लिए कहा जाता है।

नॉन-ब्रेकिंग स्पेस और शून्य-चौड़ाई वाले अक्षर

नॉन-ब्रेकिंग स्पेस और शून्य-चौड़ाई वाले अक्षर - JSON व्हाइटस्पेस एक जानबूझकर छोटी सूची है: साधारण स्पेस U+0020, टैब U+0009, लाइन फ़ीड U+000A और कैरिएज रिटर्न U+000D। एक नॉन-ब्रेकिंग स्पेस U+00A0 एक कोलन और मान के बीच सामान्य स्पेस के समान दिख सकता है, लेकिन यह उस सूची में नहीं है। शून्य-चौड़ाई वाला स्थान U+200B कुछ भी नहीं दिखाता है, फिर भी यह उद्धृत स्ट्रिंग के बाहर एक अप्रत्याशित वर्ण बना हुआ है।

वेब पेज शब्दों को एक साथ रखने के लिए नॉन-ब्रेकिंग स्पेस का उपयोग करते हैं, और मैसेजिंग सिस्टम रैपिंग या स्क्रिप्ट हैंडलिंग के लिए शून्य-चौड़ाई वाले अक्षर डाल सकते हैं। स्वरूपित स्निपेट्स की प्रतिलिपि बनाकर उन्हें कॉन्फ़िगरेशन में ले जाया जा सकता है। संरचनात्मक NBSP वर्णों को सामान्य रिक्त स्थान से बदलें और रिपोर्ट किए गए ऑफसेट द्वारा निर्देशित, अनपेक्षित शून्य-चौड़ाई वाले वर्ण हटा दें।

कार्यान्वित उदाहरण: चैट संदेश से कॉपी किया गया कॉन्फिगरेशन

कार्यान्वित उदाहरण: चैट संदेश से कॉपी किया गया एक कॉन्फिगरेशन - मान लीजिए कि दृश्यमान टेक्स्ट `{"mode": "safe"}` जैसा दिखता है, लेकिन शुरुआत में सत्यापन विफल हो जाता है। एक हेक्स दृश्य ब्रेस से पहले ईएफ बीबी बीएफ को प्रकट करता है। उस BOM को हटाने से अगली रिपोर्ट `mode` से पहले के कोटेशन पर पहुंच जाती है, जो वास्तव में U+201C है। दोनों स्मार्ट डिलीमीटर को U+0022 से बदलने पर कोलन और मान के बीच एक U+00A0 प्रदर्शित होता है।

उस संरचनात्मक नॉन-ब्रेकिंग स्पेस को U+0020 में बदलें और एक बार फिर से मान्य करें। स्वीकृत परिणाम अब सामान्य रूप से स्वरूपित किया जा सकता है। यह अनुक्रम दिखाता है कि केवल स्क्रीन पर दिखाई देने वाली चीज़ों की मरम्मत करना अविश्वसनीय क्यों है: कई अदृश्य या समान दिखने वाले वर्ण विभिन्न व्याकरणिक पदों पर कब्जा कर सकते हैं। प्रत्येक पंक्ति और कॉलम का पालन करें, वास्तविक कोड बिंदु की पहचान करें, एक जानबूझकर प्रतिस्थापन करें और सत्यापन को फिर से चलाएँ।

अदृश्य को कैसे देखें

अदृश्य को कैसे देखें - टैब को रिक्त स्थान से अलग करने और असामान्य अंतराल प्रकट करने के लिए एडिटर के रेंडर-व्हाट्सएप विकल्प को सक्षम करें, फिर उन वर्णों के लिए यूनिकोड इंस्पेक्टर या हेक्स व्यू का उपयोग करें जो अभी भी समान दिखते हैं। एक UTF-8 BOM EF BB BF के रूप में, एक नॉन-ब्रेकिंग स्पेस C2 A0 के रूप में और एक शून्य-चौड़ाई वाला स्पेस E2 80 8B के रूप में दिखाई देता है। स्मार्ट उद्घाटन और समापन उद्धरण E2 80 9C और E2 80 9D के रूप में दिखाई देते हैं।

गिनती से पहले डायग्नोस्टिक की समन्वय प्रणाली का मिलान करें। ToolAcre एक JavaScript स्ट्रिंग को स्कैन करता है, इसलिए इसके कॉलम UTF-8 बाइट्स के बजाय UTF-16 कोड इकाइयों की गिनती करते हैं। इसलिए एक बाइट-उन्मुख हेक्स एडिटर गैर-ASCII वर्णों के बाद एक बड़ा संख्यात्मक ऑफसेट दिखा सकता है। खोज को सीमित करने, पड़ोसी कोड बिंदुओं का निरीक्षण करने और केवल आवश्यकतानुसार अनुवाद करने के लिए रिपोर्ट की गई लाइन का उपयोग करें।

इसमें क्या शामिल नहीं है

इसमें क्या शामिल नहीं है - `café` जैसे मोजिबेक पूरी तरह से वैध JSON हो सकते हैं। पार्सर स्ट्रिंग वर्णों का एक सामान्य अनुक्रम देखता है और इसका कोई सबूत नहीं है कि UTF-8 बाइट्स को पहले किसी अन्य एन्कोडिंग के रूप में डिकोड किया गया था। इसी तरह, उद्धृत मूल्य के अंदर एक गैर-ब्रेकिंग स्पेस या शून्य-चौड़ाई वाला वर्ण वाक्यात्मक रूप से मान्य है। सत्यापन उन वर्णों को पकड़ता है जो JSON व्याकरण का उल्लंघन करते हैं; यह तय नहीं कर सकता कि वैध यूनिकोड सामग्री लेखक के इरादे से मेल खाती है या नहीं।

मूल और गलत एन्कोडिंग के ज्ञान का उपयोग करके, सीमा पर एन्कोडिंग भ्रष्टाचार को ठीक करें जहां बाइट्स टेक्स्ट बन जाते हैं। JSON स्ट्रिंग को तब तक बार-बार एन्कोड और डीकोड न करें जब तक वह बेहतर न दिखने लगे, क्योंकि इससे पहले से ही सही वर्णों को नुकसान हो सकता है। एप्लिकेशन-स्तरीय सामान्यीकरण भी एक अलग निर्णय है: दृश्यमान समान यूनिकोड अनुक्रम वैध रहते हुए अलग-अलग तुलना कर सकते हैं।

टेकअवे: लाइन साफ ​​दिखने पर भी रिपोर्ट किए गए कॉलम पर भरोसा करें

टेकअवे: लाइन साफ ​​दिखने पर भी रिपोर्ट किए गए कॉलम पर भरोसा करें - अदृश्य अक्षर और समान दिखने वाले विराम चिह्न अभी भी स्रोत में सटीक स्थान पर हैं। एक अग्रणी BOM, घुंघराले सीमांकक, गैर-ब्रेकिंग स्पेस या शून्य-चौड़ाई चिह्न एक पार्सर को ब्रेस या उद्धरण तक पहुंचने से रोक सकता है जो सही प्रतीत होता है। रिक्त स्थान प्रकट करें, कोड बिंदुओं या बाइट्स का निरीक्षण करें और उस वर्ण को प्रतिस्थापित करें जिसकी पहचान उसकी व्याकरणिक भूमिका के साथ टकराव करती है बजाय पास के दृश्यमान JSON को यादृच्छिक रूप से संपादित करने के।

याद रखें कि स्थिति वर्णों की गिनती कर सकती है जबकि हेक्स टूल एन्कोडेड बाइट्स की गिनती करता है, इसलिए प्रत्येक ऑफसेट संख्या के मिलान की अपेक्षा करने के बजाय आसपास के पाठ की तुलना करें। केवल दस्तावेज़ सीमा पर BOM को हटाएं, स्मार्ट डिलीमीटर को U+0022 में बदलें और स्ट्रिंग्स के अंदर वैध यूनिकोड को मिटाए बिना अमान्य संरचनात्मक रिक्ति को बदलें।