हिन्दी

डेवलपर टूल · सिंटेक्स कन्वर्टर्स

TOML टेबल कैसे JSON ऑब्जेक्ट बन जाती हैं: [टेबल], [[सरणी]] और बिंदीदार कुंजियाँ

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

toml json डेटा-प्रारूप

TOML टेबल हेडर नेस्टेड JSON ऑब्जेक्ट ट्री में उतरते हैं
मूल ToolAcre वेक्टर चित्रण

TOML के हेडर JSON के ब्रेसिज़ जैसे बिल्कुल नहीं दिखते, लेकिन वे बिल्कुल उसी नेस्टिंग को परिभाषित करते हैं। यह पोस्ट बताती है कि कैसे [सर्वर], [[उत्पाद]] और a.b.c JSON ऑब्जेक्ट और एरे पर मैप करते हैं, और जहां दोनों मॉडल अलग होते हैं।

घोंसला कहां से आया? - एक सपाट दिखने वाली TOML फ़ाइल को गहराई से नेस्टेड JSON में परिवर्तित किया गया, और हेडर जिसके कारण ऐसा हुआ

TOML फ़ाइल लगभग सपाट दिखाई दे सकती है क्योंकि कोष्ठक में नेस्टिंग होती है। `[a.b.c]` मध्यवर्ती तालिकाएँ खोलता है, इसलिए `d = 1` इसके नीचे `{"a":{"b":{"c":{"d":1}}}}` हो जाता है। JSON ब्रेसिज़ एक पदानुक्रम को दृश्यमान बनाते हैं जिसे TOML सक्रिय तालिका पथ के माध्यम से व्यक्त करता है।

ToolAcre सिंटैक्स पार्सिंग को smol-toml को सौंपता है और फिर उन मानों को सामान्य करता है जिन्हें JSON नहीं ले जा सकता। यह पंक्ति-आधारित पुनर्लेखन नहीं है. तालिकाएँ, बिंदीदार कुंजियाँ और तालिकाओं की सारणियाँ JSON क्रमांकन से पहले सामान्य ऑब्जेक्ट और सारणियाँ बन जाती हैं, यही कारण है कि उनकी वर्तनी और टिप्पणियाँ आउटपुट में उपलब्ध नहीं होती हैं।

[टेबल] हेडर - एक हेडर एक नेस्टेड ऑब्जेक्ट को कैसे खोलता है और कैसे [ए.बी.सी.] अंतर्निहित रूप से मध्यवर्ती ऑब्जेक्ट बनाता है

एक सिंगल-ब्रैकेट हेडर एक तालिका खोलता है। `[owner]` निम्नलिखित असाइनमेंट को `owner` में निर्देशित करता है; `[owner.contact]` नेस्टेड संपर्क ऑब्जेक्ट बनाता या उसमें प्रवेश करता है। मध्यवर्ती वस्तुओं के लिए अलग हेडर की आवश्यकता नहीं है। उनका अस्तित्व हेडर में पथ खंडों से चलता है।

किसी भी हेडर से पहले असाइनमेंट रूट पर रहते हैं। बाद की तालिकाएँ उन्हें पूर्वव्यापी रूप से स्थानांतरित नहीं करती हैं। परिवर्तित JSON की समीक्षा करते समय, पंक्तियों के बीच की भौतिक दूरी के बजाय पूर्ण संपत्ति पथ का पालन करें: TOML की वर्तमान तालिका तब तक सक्रिय रहती है जब तक कोई अन्य हेडर इसे नहीं बदलता।

[[तालिकाओं की सारणी]] - बार-बार दोहराया जाने वाला डबल-ब्रैकेट हेडर किसी सरणी में ऑब्जेक्ट को क्यों जोड़ता है, और यह किस क्रम को संरक्षित करता है

एक डबल-ब्रैकेट हेडर एक तालिका को एक सरणी में जोड़ता है। स्रोत क्रम में दो `[[server]]` अनुभाग `server: [{...},{...}]` बन जाते हैं। प्रत्येक हेडर के अंतर्गत फ़ील्ड उस सरणी सदस्य से संबंधित होती हैं जब तक कि कोई अन्य हेडर शुरू नहीं हो जाता, जिससे JSON में दोहराया गया कॉन्फ़िगरेशन स्पष्ट हो जाता है।

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

बिंदीदार कुंजियाँ और इनलाइन तालिकाएँ - a.b = 1 और { x = 1 } समान नेस्टिंग को व्यक्त करने के दो और तरीकों के रूप में

बिंदीदार असाइनमेंट एक अन्य पथ संकेतन प्रदान करते हैं: `a.b.c = true` संबंधित तालिका शीर्षलेखों के समान नेस्टेड ऑब्जेक्ट आकार उत्पन्न करते हैं। इनलाइन टेबल जैसे `point = { x = 1, y = 2 }` तुरंत नेस्टेड ऑब्जेक्ट बन जाते हैं। ये फॉर्म समान पेड़ों का वर्णन कर सकते हैं जबकि एक समीक्षक को बहुत अलग दिखते हैं।

JSON केवल परिणामी कुंजियों और मानों को रिकॉर्ड करता है, न कि किस TOML नोटेशन ने उन्हें लिखा है। इसलिए वापस परिवर्तित करने से हेडर, बिंदीदार कुंजियाँ और इनलाइन तालिकाओं के बीच मूल विकल्प बहाल नहीं किया जा सकता है। TOML लेखक पेड़ से अपना स्वयं का वैध क्रमांकन चुनता है।

वे प्रकार जो आगे बढ़ते हैं और वे प्रकार जो नहीं चलते हैं - पूर्णांक, फ़्लोट्स, बूलियन और स्ट्रिंग्स सीधे मैप करते हैं; दिनांक-समय स्ट्रिंग बन जाते हैं और JSON null का कोई TOML स्रोत नहीं होता है

स्ट्रिंग्स, सुरक्षित पूर्णांक, फ़्लोट्स, बूलियन, ऐरे और टेबल सीधे मैप करते हैं। TOML के चार अस्थायी प्रकार नहीं हैं: ऑफसेट दिनांक-समय, स्थानीय दिनांक-समय, स्थानीय दिनांक और स्थानीय समय उनके RFC 3339-जैसे स्रोत स्ट्रिंग बन जाते हैं, और एक चेतावनी प्रत्येक पथ और प्रकार का नाम देती है। लेखक ने बाद में डेटाटाइम टोकन को दोबारा बनाने के बजाय उन स्ट्रिंग्स को उद्धृत किया।

TOML के हस्ताक्षरित 64-बिट पूर्णांक JavaScript की सुरक्षित पूर्णांक सीमा से अधिक हो सकते हैं। जरूरत पड़ने पर smol-toml BigInt जैसे मान लौटाता है; ToolAcre उन्हें दशमलव स्ट्रिंग में परिवर्तित करता है और अंकों को पूर्णांकित करने के बजाय चेतावनी देता है। यह JSON प्रकार को बदलने की कीमत पर वर्तनी को सुरक्षित रखता है।

कार्यान्वित उदाहरण: एक pyproject.toml - [प्रोजेक्ट], [project.optional-निर्भरताएं] और एक [[tool.plugins]] सूची प्रत्येक स्तर का पता लगाने के साथ JSON में परिवर्तित हो गई

`name = "demo"`, `[project]`, `dependencies = ["a", "b"]`, `[project.optional]`, `test = ["vitest"]`, फिर अलग-अलग नामों वाली दो `[[tool.plugins]]` तालिकाएँ आज़माएँ। JSON नाम को रूट पर रखता है, प्रोजेक्ट और वैकल्पिक को नेस्ट करता है, और टूल के नीचे एक प्लगइन्स ऐरे तैयार करता है।

`released = 1979-05-27` और `huge = 9223372036854775807` जोड़ें. पहली स्ट्रिंग बन जाती है `1979-05-27`; दूसरा दशमलव स्ट्रिंग बन जाता है। दोनों चेतावनियाँ बदले हुए रास्तों की पहचान करती हैं, जिससे गैर-JSON प्रकारों को मूक दिनांक या संख्या जबरदस्ती की अनुमति देने के बजाय समीक्षा योग्य बनाया जा सकता है।

इसमें क्या शामिल नहीं है - समझदार हेडर ग्रुपिंग के साथ JSON को मुहावरेदार TOML में परिवर्तित करना, जिसमें शैली विकल्प शामिल हैं, कोई भी नियम पूरी तरह से निर्धारित नहीं करता है

JSON-to-TOML रूट ऑब्जेक्ट के लिए समर्थित है, लेकिन यह मुहावरेदार लेखक विकल्पों या टिप्पणियों को दोबारा नहीं बनाता है। शून्य-मूल्य वाली कुंजियाँ छोड़ दी गई हैं; किसी सरणी के अंदर शून्य स्थिति को संरक्षित करने के लिए एक खाली स्ट्रिंग बन जाता है। रूट ऐरे, स्केलर या नल को अस्वीकार कर दिया गया है क्योंकि TOML दस्तावेज़ एक तालिका होना चाहिए।

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

JSON को TOML पर वापस लिखना समर्थित है, लेकिन टिप्पणियाँ, डेटाटाइम प्रकार और लेखकीय शैली वापस नहीं आती हैं

TOML हेडर को पथ के रूप में और दोहरे ब्रैकेट को संलग्न संचालन के रूप में पढ़ें। JSON दृश्य परिणामी पेड़ का पता लगाने के लिए मूल्यवान है, जबकि चेतावनियाँ डेटाटाइम और विस्तृत पूर्णांकों को उजागर करती हैं जो एक प्रकार की सीमा को पार करते हैं। कोई भी चेतावनी प्रकट होने पर ऑपरेशन को दोषरहित न कहें।

कॉन्फ़िगरेशन माइग्रेशन के लिए, मूल को परिवर्तित आउटपुट के पास रखें। पहले मानों को सत्यापित करें, फिर पाठकों और लक्ष्य टूल के लिए TOML संगठन को संपादित करें। सिंटैक्स कन्वर्टर्स यांत्रिक पार्स-एंड-राइट चरण निष्पादित करता है; यह प्रोजेक्ट-विशिष्ट समूहीकरण, स्वीकृत कुंजियाँ या एप्लिकेशन उस फ़ाइल का समर्थन करता है या नहीं, यह तय नहीं कर सकता है।

अंतिम तुलना में तीन प्रश्नों को अलग करना चाहिए जिन्हें एक साथ धुंधला करना आसान हो। सबसे पहले, क्या पार्स किए गए मान जीवित रहे? दूसरा, क्या कोई TOML-केवल प्रकार JSON स्ट्रिंग बन गया या कोई शून्य गायब हो गया? तीसरा, क्या नव क्रमबद्ध TOML को इस तरह व्यवस्थित किया गया है कि एक अनुरक्षक समझ सके? पहले दो को मूल्यों और चेतावनियों के विरुद्ध जांचा जा सकता है; तीसरे को मानवीय समीक्षा की आवश्यकता है। उन चेकों को अलग रखने से तकनीकी रूप से मान्य क्रमबद्धता को एक वफादार माइग्रेशन कहा जाने से रोकता है जब इसके प्रकार या आधिकारिक संरचना बदल जाती है।