हिन्दी

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

पिछला अल्पविराम JSON को क्यों तोड़ता है और सत्यापनकर्ता कहाँ इंगित करता है

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

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

एक पिछला अल्पविराम JSON को क्यों तोड़ता है और सत्यापनकर्ता कहाँ JSON टोकन और एक सटीक सत्यापन सीमा के साथ चित्रित होता है
मूल ToolAcre वेक्टर चित्रण

पिछला अल्पविराम सबसे आम JSON गलती है, और त्रुटि कभी भी अल्पविराम पर नहीं आती है। जानें कि अल्पविराम के बाद व्याकरण क्या अपेक्षा करता है और रिपोर्ट की गई स्थिति को कैसे पढ़ा जाए।

एक अक्षर वाला बग जिसे ढूंढने में दस मिनट लगते हैं

एक-वर्ण वाला बग जिसे खोजने में दस मिनट लगते हैं - हाथ से संपादित एक कॉन्फिगरेशन, अंतिम प्रॉपर्टी के बाद छोड़ा गया अल्पविराम, और एक बिल्ड जो विफल हो जाता है। एक सख्त पार्सर वास्तव में दस्तावेज़ में मौजूद टोकन अनुक्रम का पालन करता है। `'enabled': true,` पर समाप्त होने वाली वस्तु और `'blue',` पर समाप्त होने वाली सरणी पर विचार करें: दोनों विभाजक एक और आइटम का वादा करते हैं, भले ही अगला टोकन कंटेनर को बंद कर दे।

ToolAcre ब्राउज़र इंजन संदेश से कोई स्थान प्राप्त नहीं करता है। JSON.parse पहले वैधता तय करता है; विफलता के बाद ही रिपॉजिटरी स्कैनर टेक्स्ट पर चलता है और पहले अस्वीकार्य चरित्र की रिपोर्ट करता है। अनुगामी अल्पविराम के लिए, वह वर्ण समापन ब्रेस या ब्रैकेट है, और कारण स्पष्ट रूप से "अनुगामी अल्पविराम" कहता है। किसी ऑब्जेक्ट में, किसी अन्य उद्धृत सदस्य का नाम गायब है; एक सरणी में, एक और पूर्ण मान गायब है।

अल्पविराम के बाद JSON व्याकरण क्या कहता है

JSON व्याकरण अल्पविराम के बाद क्या कहता है - RFC 8259 वस्तुओं में सरणियों और सदस्यों में मानों को अलग करने के लिए अल्पविराम का उपयोग करता है। इसलिए एक विभाजक को प्रत्येक पक्ष पर एक वैध वस्तु की आवश्यकता होती है। ऑब्जेक्ट अल्पविराम के बाद, पार्सर एक दोहरे-उद्धृत नाम, एक कोलन और एक मान की अपेक्षा करता है। किसी सरणी अल्पविराम के बाद, यह किसी वैध JSON मान की अपेक्षा करता है। एक समापन सीमांकक किसी भी उत्पादन को संतुष्ट नहीं करता है।

विभाजक दो सदस्यों या तत्वों के बीच होता है, अंतिम के बाद कभी नहीं। अंतिम अल्पविराम हटाने से कोई मान या क्रम नहीं बदलता; यह व्याकरण को पुनर्स्थापित करता है जो कंटेनर को उसके अंतिम मान के बाद सीधे बंद कर देता है। यही कारण है कि प्रत्येक पूर्ववर्ती आइटम के बाद अल्पविराम बिना किसी परेशानी के दिखाई दे सकता है: उनमें से प्रत्येक अल्पविराम के बाद अगला आइटम आता है जिसका वह वादा करता है।

त्रुटि समापन ब्रैकेट पर क्यों आती है?

त्रुटि समापन ब्रैकेट पर क्यों आती है - एक कंटेनर के बीच में अल्पविराम वैध है, इसलिए पार्सर इसे केवल देखते ही अस्वीकार नहीं कर सकता है। यह विभाजक का उपभोग करता है और किसी अन्य नाम या मान की अपेक्षा करने के लिए स्थिति बदलता है। विरोधाभास तभी निश्चित हो जाता है जब इसके स्थान पर `}` या `]` आ जाता है। वह परिसीमन वह है जहां वादा किया गया आइटम अनुपस्थित साबित होता है, भले ही पूर्ववर्ती अल्पविराम राज्य परिवर्तन का कारण बना हो।

इसलिए रिपोर्ट किया गया सीमांकक पार्सर स्थिति के बारे में साक्ष्य है, ब्रेस या ब्रैकेट को हटाने का सुझाव नहीं है। बाईं ओर एक टोकन पढ़ें. यदि वह टोकन अल्पविराम है और सीमांकक उसी कंटेनर को बंद कर देता है, तो अल्पविराम हटा दें और समापन को सुरक्षित रखें। ToolAcre का स्कैनर अनुगामी-अल्पविराम स्थिति को नाम देता है और JSON.parse द्वारा दस्तावेज़ को अस्वीकार करने के बाद स्रोत स्थिति प्रदान करता है।

JavaScript, पायथन और आधुनिक लिंटर इसकी अनुमति देते हैं, JSON नहीं देता

JavaScript, पायथन और आधुनिक लिंटर इसकी अनुमति देते हैं, JSON नहीं देते - स्रोत-भाषा शाब्दिक अक्सर अंतिम आइटम के बाद अल्पविराम की अनुमति देते हैं क्योंकि यह पुन: व्यवस्थित पंक्तियों और भविष्य के परिवर्धन की समीक्षा करना आसान बनाता है। फ़ॉर्मेटर उस शैली को सम्मिलित या संरक्षित भी कर सकते हैं। वे सुविधाएं प्रत्येक भाषा व्याकरण से संबंधित हैं। एक `.js` ऑब्जेक्ट शाब्दिक या पायथन शब्दकोश वैध स्रोत हो सकता है जबकि वही दृश्य विराम चिह्न RFC 8259 JSON दस्तावेज़ में अमान्य रहता है।

JavaScript के लिए कॉन्फ़िगर किया गया एडिटर परिणामस्वरूप कोई चेतावनी नहीं दिखा सकता जब चिपकाया गया टुकड़ा अल्पविराम में समाप्त होता है। गंतव्य पार्सर अभी भी स्वीकृति को नियंत्रित करता है। `.json` टेक्स्ट के लिए JSON भाषा मोड का उपयोग करें और API या कॉन्फ़िगरेशन फ़ील्ड पर भेजे गए सटीक पेलोड को मान्य करें। किसी स्रोत फ़ाइल, लिंटर या JSON5 पार्सर में उदारता किसी सख्त JSON उपभोक्ता के बारे में हस्तांतरणीय साक्ष्य नहीं है।

कार्यान्वित उदाहरण: एक फ़ाइल में तीन अनुवर्ती अल्पविराम

कार्यान्वित उदाहरण: एक फ़ाइल में तीन अनुवर्ती अल्पविराम - मान लीजिए `features` `"beta",` के साथ समाप्त होता है, इसकी युक्त वस्तु `"enabled": true,` के साथ समाप्त होती है, और दूसरे रूट सदस्य में भी वही गलती होती है। पहला सत्यापन `beta` के बाद समापन ब्रैकेट पर रुकता है। उस अल्पविराम को हटाने से पार्सिंग को `true` के बाद समापन ब्रेस तक जारी रखने की अनुमति मिलती है, और दूसरे स्थान की मरम्मत से शेष रूट-स्तरीय ऑब्जेक्ट त्रुटि का पता चलता है।

यह क्रम अपेक्षित है क्योंकि पार्सर्स आम तौर पर पहले बिंदु की रिपोर्ट करते हैं जहां निरंतरता असंभव है, प्रत्येक बाद के दोष की नहीं। प्रत्येक पंक्ति और स्तंभ को उसके समापन सीमांकक पर मैप करें, उसके ठीक पहले विभाजक का निरीक्षण करें, एक जानबूझकर परिवर्तन करें और सत्यापन फिर से चलाएँ। सभी अल्पविरामों को एक साथ न हटाएं: वास्तविक पड़ोसियों के बीच विभाजक आवश्यक हैं। बार-बार सत्यापन एक ही दस्तावेज़ में तीन अमान्य टर्मिनल अल्पविरामों को वैध अल्पविरामों से अलग करता है।

ऐसे वेरिएंट जो समान त्रुटि उत्पन्न करते हैं

वे वेरिएंट जो संबंधित विभाजक त्रुटियाँ उत्पन्न करते हैं - एक अग्रणी अल्पविराम, एक पंक्ति में दो अल्पविराम, और मूल मान के बाद एक अल्पविराम सभी एक ही वर्ण का दुरुपयोग करते हैं लेकिन विभिन्न पार्सर स्थितियों का उल्लंघन करते हैं। एक अग्रणी अल्पविराम के बाईं ओर कोई पूर्ण आइटम नहीं है। लगातार अल्पविराम विभाजकों के बीच कोई आइटम प्रदान नहीं करते हैं। JSON टेक्स्ट के वैध अंत तक पहुंचने के बाद संपूर्ण रूट मान के बाद एक अल्पविराम दिखाई देता है।

उन मामलों को स्वचालित रूप से अनुवर्ती अल्पविराम से लेबल नहीं किया जाना चाहिए। सटीक कारण स्थिति और कंटेनर स्थिति पर निर्भर करता है। `{"a":1,,"b":2}` के अंदर, दूसरा अल्पविराम अप्रत्याशित है जहां उद्धृत सदस्य का नाम शुरू होना चाहिए। `[ ,1]` में, पहला अल्पविराम वहां दिखाई देता है जहां मान की आवश्यकता होती है। क्लोजिंग-डिलीमीटर पैटर्न के बाहर सार्वभौमिक "पिछले अल्पविराम हटाएं" नियम लागू करने के बजाय डायग्नोस्टिक और आसपास के टोकन का निरीक्षण करें।

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

इसमें क्या शामिल नहीं है - JSON5 और कुछ JSON-टिप्पणियों के साथ वर्कफ़्लो जानबूझकर अनुगामी अल्पविरामों की अनुमति देते हैं। उन व्याकरणों में से किCAक के लिए लिखी गई फ़ाइल को उसके घोषित पार्सर, एक्सटेंशन और टूलींग का उपयोग करना चाहिए। इसे सख्त JSON के रूप में मानने से ऐसी त्रुटियां उत्पन्न होंगी जो एक प्रारूप बेमेल को दर्शाती हैं, जरूरी नहीं कि यह एक संलेखन गलती हो। इसके विपरीत, इसे एक अनुज्ञेय पार्सर के साथ स्वीकार करने से स्रोत सख्त JSON समापन बिंदु पर भेजने के लिए सुरक्षित नहीं हो जाता है।

केवल इस निदान को शांत करने के लिए पार्सर बदलने से स्वीकृत भाषा बदल जाती है और अंतिम उपभोक्ता के साथ असंगति छिप सकती है। टिप्पणियाँ, गैर-उद्धृत नाम और एकल-उद्धृत स्ट्रिंग विस्तारित प्रारूपों में अनुगामी अल्पविरामों के साथ हो सकती हैं, जिससे पाठ के सीमा पार करने पर अतिरिक्त विफलताएँ पैदा होती हैं। पहले गंतव्य अनुबंध की पुष्टि करें. यदि यह JSON कहता है, तो एक्सटेंशन सिंटैक्स हटा दें; यदि यह JSON5 या JSONC कहता है, तो उस सटीक प्रारूप को लागू करने वाले टूलींग से सत्यापित करें।

टेकअवे: रिपोर्ट की गई स्थिति के बाईं ओर एक टोकन देखें

टेकअवे: रिपोर्ट की गई स्थिति के बाईं ओर एक टोकन देखें - जब कैरेट `}` या `]` के अंतर्गत बैठता है, तो पूर्ववर्ती अल्पविराम ने एक सदस्य या तत्व का वादा किया हो सकता है जो कभी नहीं आया। संरचनात्मक रूप से आवश्यक समापन सीमांकक को सुरक्षित रखें और केवल उस टर्मिनल विभाजक को हटा दें। फिर पूरे दस्तावेज़ को दोबारा सत्यापित करें, क्योंकि पहले मरम्मत किए गए स्थान बाद के कंटेनर में एक और अनुगामी अल्पविराम को उजागर कर सकता है।

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