डेवलपर टूल · सिंटेक्स कन्वर्टर्स
YAML इंडेंटेशन गलती को JSON में परिवर्तित करके डीबग करें
· यह क्यों मायने रखती है
yaml json डिबगिंग
YAML इंडेंटेशन त्रुटियां अक्सर पार्स त्रुटि के बजाय गलत संरचना वाली एक वैध फ़ाइल उत्पन्न करती हैं। यह पोस्ट दिखाती है कि कैसे JSON में कन्वर्ट करने से वही पता चलता है जो पार्सर ने समझा है, इसलिए गलत कुंजी स्पष्ट हो जाती है।
वह चरण जो कभी नहीं चला - एक वर्कफ़्लो फ़ाइल जो ठीक से पार्स हो गई और एक कुंजी जो एक स्तर बहुत ऊपर चली गई
एक वर्कफ़्लो `with` को किसी चरण के अंदर रखने के बजाय उसके बगल में रखकर सफलतापूर्वक पार्स किया जा सकता है। धावक बाद में आकृति को अनदेखा या अस्वीकार कर देता है, और दृश्य निरीक्षण बदलाव को याद करता है क्योंकि स्रोत साफ-सुथरा रहता है। JSON में कन्वर्ट करने से ब्रेसिज़ और सरणी सीमाओं के माध्यम से वास्तविक पैरेंट उजागर हो जाता है।
ToolAcre लाइन और कॉलम के साथ विकृत YAML की रिपोर्ट करता है, लेकिन वैध गलत संरचना कोई सिंटैक्स त्रुटि उत्पन्न नहीं करती है। इसलिए परिवर्तित वृक्ष एक नैदानिक दृश्य है: यह आपको बताता है कि इस पार्सर ने क्या स्वीकार किया है, न कि वर्कफ़्लो स्कीमा का क्या इरादा है।
इंडेंटेशन गलतियाँ अक्सर त्रुटियाँ क्यों नहीं होती हैं - YAML की संरचना रिक्त स्थान है, इसलिए एक स्थानांतरित रेखा आमतौर पर एक वैध लेकिन अलग दस्तावेज़ बनाती है
व्हाइटस्पेस YAML पदानुक्रम रखता है। एक रेखा को बायीं ओर ले जाने से एक बच्चा भाई-बहन में बदल सकता है; डैश को हिलाने से किसी आइटम को दूसरे क्रम में रखा जा सकता है। दोनों दस्तावेज़ YAML व्याकरण को पूरा कर सकते हैं। सिंटैक्स सत्यापन यह तय नहीं कर सकता कि कौन सा नेस्टिंग एप्लिकेशन से मेल खाता है।
इंडेंटेशन में टैब पार्सर द्वारा अस्वीकार कर दिए जाते हैं और एक स्थिति प्राप्त करते हैं। जो रिक्त स्थान गलत वैध पदानुक्रम उत्पन्न करते हैं, उन्हें इसके बजाय संरचनात्मक तुलना की आवश्यकता होती है। यह अंतर बताता है कि क्यों कुछ इंडेंटेशन गलतियाँ तुरंत विफल हो जाती हैं जबकि अन्य अनुप्रयोग व्यवहार तक जीवित रहती हैं।
JSON क्या स्पष्ट करता है - ब्रेसिज़ और ब्रैकेट जो सटीक रूप से दिखाते हैं कि कुंजी किस ऑब्जेक्ट से संबंधित है
JSON ऑब्जेक्ट सीमाओं को ब्रेसिज़ के साथ और सरणी सदस्यों को ब्रैकेट के साथ लिखता है। एक गलत YAML कुंजी उस ऑब्जेक्ट के बाहर दिखाई देती है जहां आपने इसकी अपेक्षा की थी, और एक डैश एक सरणी सीमा बन जाता है जिसे नज़रअंदाज़ करना मुश्किल होता है। सुंदर JSON में इंडेंटेशन प्रेजेंटेशन है; विराम चिह्न संरचना को परिभाषित करता है।
दृश्य से सुलझे हुए प्रकारों का भी पता चलता है। चयनित स्कीमा के अंतर्गत एक गैर-उद्धृत स्केलर शून्य, संख्या या बूलियन हो सकता है। मानों की जांच किए बिना पदानुक्रम को ठीक करने से दूसरा बग रह सकता है, इसलिए संपत्ति पथ और JSON प्रकार दोनों की तुलना करें।
गलती के सामान्य आकार - गलत माता-पिता के अंतर्गत एक सूची आइटम, एक कुंजी जो बच्चे के बजाय भाई-बहन बन गई, और रिक्त स्थान के साथ मिश्रित टैब
सामान्य गलतियों में अनुक्रम आइटम को गलत सूची के साथ संरेखित करना, मैपिंग कुंजी को सिबलिंग में बदल देना और टैब वर्णों को रिक्त स्थान के साथ मिला देना शामिल है। डुप्लिकेट कुंजियाँ एक और जाल हैं: ToolAcre अंतिम मान रखता है और एक स्थिति के साथ चेतावनी देता है, इसलिए JSON में केवल जीवित संपत्ति होती है।
एंकर परिणाम को बड़ा दिखा सकते हैं क्योंकि उपनाम दोहराए गए डेटा में विस्तारित होते हैं। इस रूपांतरण के लिए यह अपेक्षित है और इसे आकस्मिक इंडेंटेशन के साथ भ्रमित नहीं किया जाना चाहिए। प्रत्येक संरचनात्मक अंतर को रिक्त स्थान के लिए जिम्मेदार ठहराने से पहले चेतावनियाँ पढ़ें।
कार्यान्वित उदाहरण: एक गलत इंडेंट वाले 'विथ' ब्लॉक के साथ एक CI वर्कफ़्लो - JSON में परिवर्तित करना, गलत कुंजी का पता लगाना, ठीक करना और पुनः परिवर्तित करना
`steps`, एक `uses` प्रविष्टि और एक `with` मैपिंग के साथ एक संशोधित कार्य बनाएं। आउटडेंट `with` तो यह `steps` का सहोदर बन जाता है, फिर परिवर्तित करें। JSON ब्रेसिज़ दर्शाते हैं कि `with` स्टेप ऑब्जेक्ट के बजाय कार्य से संबंधित है। इसे सूची आइटम के नीचे ले जाएँ और इच्छित नेस्टिंग देखने के लिए इसे पुनः रूपांतरित करें।
यह उदाहरण यह दावा करने से बचता है कि एक विशिष्ट CI सेवा कैसे प्रतिक्रिया देती है, क्योंकि कन्वर्टर उस स्कीमा को लोड नहीं करता है। इसका प्रमाण पार्स किया गया पदानुक्रम है। स्कीमा सत्यापन का पालन किया जाना चाहिए और फिर रिपोर्ट कर सकते हैं कि सही पथ पर `with` स्वीकार किया गया है या नहीं।
एक सही इंडेंटेड संस्करण तैयार करने के लिए रिवर्स रूपांतरण - JSON से YAML का उपयोग करके आप वापस पेस्ट कर सकते हैं
एक बार JSON संरचना सही हो जाने पर, इसे वापस YAML में परिवर्तित करने से सीरिएलाइज़र से लगातार इंडेंटेशन उत्पन्न होता है। अस्पष्ट स्ट्रिंग्स उद्धरण प्राप्त कर सकती हैं, और टिप्पणियाँ पुनर्स्थापित नहीं की जाती हैं। आउटपुट को एक साफ़ डेटा क्रमबद्धता के रूप में मानें, स्रोत-संरक्षित फ़ॉर्मेटर के रूप में नहीं।
यदि मूल टिप्पणियाँ परिचालन विकल्पों की व्याख्या करती हैं, तो सही संरचना को आँख बंद करके बदलने के बजाय उसे बनाए रखी गई फ़ाइल में कॉपी करें। एक जेनरेट की गई फ़ाइल संरचनात्मक रूप से सही और एडिटरीय रूप से अपूर्ण हो सकती है।
इसमें क्या शामिल नहीं है - वर्कफ़्लो या मेनिफेस्ट स्कीमा के विरुद्ध सिमेंटिक सत्यापन, जो गलत तरीके से रखे गए कुंजी के बजाय अज्ञात कुंजी को पकड़ता है
कोई वर्कफ़्लो, Compose, कुबेरनेट्स या एप्लिकेशन स्कीमा शामिल नहीं है। एक कुंजी इच्छित माता-पिता के नीचे बैठ सकती है और फिर भी गलत वर्तनी या असमर्थित हो सकती है। सिंटैक्स कन्वर्टर्स केवल यह साबित करते हैं कि YAML स्वीकृत है और परिणामी JSON-आकार का मान दिखाता है।
अज्ञात कुंजियों, आवश्यक फ़ील्ड और अर्थ संबंधी बाधाओं के लिए स्वामित्व प्लेटफ़ॉर्म के सत्यापनकर्ता का उपयोग करें। सिंटैक्स और स्कीमा जांच को अलग-अलग रखने से स्पष्ट विफलताएं उत्पन्न होती हैं और एक सामान्य कन्वर्टर को उस डोमेन ज्ञान का श्रेय देने से बचा जाता है जो उसके पास नहीं है।
टेकअवे: जब YAML सही दिखता है और गलत व्यवहार करता है, तो इसे JSON के रूप में देखें - और सिंटेक्स कन्वर्टर्स पैनल इसे तुरंत कैसे करता है
जब YAML सही दिखता है लेकिन गलत व्यवहार करता है, तो पार्स किए गए पेड़ का निरीक्षण करें। JSON ब्रेसिज़ और ब्रैकेट पेरेंटेज को स्पष्ट बनाते हैं, जबकि ToolAcre की चेतावनियाँ डुप्लिकेट, स्ट्रीम और मान परिवर्तनों को उजागर करती हैं जो तस्वीर को जटिल बना सकती हैं।
एक पदानुक्रम त्रुटि को ठीक करें, पुनः कन्वर्ट करें और फिर स्कीमा सत्यापन चलाएँ। यह अनुक्रम एक अदृश्य व्हाइटस्पेस संदेह को देखने योग्य संरचना में बदल देता है, बिना यह दावा किए कि एक सफल रूपांतरण कॉन्फ़िगरेशन को उसके गंतव्य के लिए वैध बनाता है।
पहले और बाद की तुलना करते समय, पंक्ति संख्याओं के बजाय संपत्ति पथों पर ध्यान केंद्रित करें क्योंकि क्रमबद्धता प्रस्तुति को पुन: व्यवस्थित कर सकती है या उद्धरण जोड़ सकती है। एक उपयोगी समीक्षा अपेक्षित पथ, उसके JSON प्रकार और क्या वह किसी ऑब्जेक्ट या सरणी के अंदर बैठता है, सूचीबद्ध करती है। पहला दृश्य लक्षण ठीक होने पर भी वह छोटी चेकलिस्ट दूसरी गलत कुंजी को पकड़ लेती है, और यह उत्पन्न YAML फ़ॉर्मेटिंग को परीक्षण ओरेकल में बदलने से बचाती है।