हिन्दी

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

JSON प्रिटी-प्रिंटिंग कैसे काम करती है: इंडेंट, व्हाइटस्पेस और कुंजी क्रम

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

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

JSON प्रीटी-प्रिंटिंग कैसे काम करती है: JSON टोकन और एक सटीक सत्यापन सीमा के साथ चित्रित इंडेंट, व्हाइटस्पेस और कुंजी क्रम
मूल ToolAcre वेक्टर चित्रण

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

एक ही डेटा, तीन अलग-अलग लुक

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

ToolAcre दो, चार या आठ स्थान और एक टैब प्रदान करता है, फिर चुने गए इंडेंटेशन को JSON.stringify पर भेजता है। एक छोटा नेस्टेड परिनियोजन रिकॉर्ड तुलना को स्पष्ट करता है: क्षेत्र एक ही सरणी क्रम में रहते हैं, बूलियन बूलियन बने रहते हैं और पुनः प्रयास संख्याएँ बनी रहती हैं।

किस रिक्त स्थान को JSON महत्वहीन मानता है

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

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

इंडेंट सेटिंग कैसे लागू की जाती है

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

रिक्त स्थान प्रत्येक एडिटर में एक निश्चित दृश्य चौड़ाई बनाते हैं, जबकि एक टैब प्रत्येक दर्शक को यह चुनने देता है कि एक स्तर कितना चौड़ा दिखाई देगा। JavaScript JSON.stringify इंडेंटेशन को दस स्पेस वर्णों या आपूर्ति की गई स्ट्रिंग के पहले दस वर्णों तक सीमित करता है, हालांकि ToolAcre केवल व्यावहारिक प्रीसेट को उजागर करता है।

क्या फ़ॉर्मेटिंग से कुंजी क्रम बदल जाता है?

क्या फ़ॉर्मेटिंग से कुंजी क्रम बदल जाता है? - साधारण प्रीटी-प्रिंटिंग जानबूझकर ऑब्जेक्ट सदस्यों को सॉर्ट नहीं करती है। JSON ऑब्जेक्ट वैचारिक रूप से अव्यवस्थित संग्रह हैं, लेकिन JavaScript पार्सिंग और क्रमांकन परिभाषित संपत्ति-गणना नियमों का उपयोग करते हैं। इसलिए अधिकांश गैर-पूर्णांक कुंजियाँ अपने इनपुट क्रम में उभरती हैं, जबकि पूर्णांक जैसी कुंजियाँ अन्य नामों से पहले उत्सर्जित हो सकती हैं। उपभोक्ताओं को कभी भी सदस्य की स्थिति को व्यावसायिक अर्थ नहीं देना चाहिए, भले ही कोई फ़ॉर्मेटर इसे परिचित वस्तुओं के लिए लगातार संरक्षित करता प्रतीत हो।

ToolAcre इंडेंटेशन को सॉर्टिंग से अलग करता है। सॉर्टिंग अक्षम होने पर, यह पार्स किए गए ऑब्जेक्ट को सीधे क्रमबद्ध करता है। सॉर्टिंग सक्षम होने पर, यह पुनरावर्ती रूप से उन वस्तुओं का निर्माण करता है जिनकी कुंजियाँ JSON.stringify चलने से पहले वर्णानुक्रम में होती हैं; सारणियाँ अपना तत्व क्रम बनाए रखती हैं क्योंकि किसी सारणी को पुनः व्यवस्थित करने से उसका अर्थ बदल जाएगा। यह स्पष्ट विकल्प एक समीक्षा योग्य अंतर बनाता है: व्हाइटस्पेस-केवल आउटपुट प्रीटी-प्रिंटिंग से आता है, जबकि एक कुंजी-ऑर्डर अंतर विहित संगठन के अनुरोध से आता है।

एक पार्स-एण्ड-रीसेरियलाइज़ फ़ॉर्मेटर क्या बदल सकता है

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

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

कार्यान्वित उदाहरण: नेस्टेड ऑब्जेक्ट को फ़ॉर्मेट करना

व्यावहारिक उदाहरण: नेस्टेड ऑब्जेक्ट को फ़ॉर्मेट करना - `{"service":{"regions":["sg","us"],"retry":{"count":3}}}` से शुरू करें और दो स्थान चुनें। शुरुआती रूट ब्रेस के बाद एक नई लाइन आती है। `service` को दो प्रमुख स्थान प्राप्त होते हैं, इसके चाइल्ड गुणों को चार, सरणी तत्वों को छह और नेस्टेड `count` संपत्ति को भी छह स्थान प्राप्त होते हैं। प्रत्येक अल्पविराम एक प्रस्तुत सदस्य को समाप्त करता है, और प्रत्येक समापन सीमांकक इसके शुरुआती कंटेनर के इंडेंटेशन स्तर के साथ संरेखित होता है।

समान मान को टैब पर स्विच करने से केवल प्रत्येक स्तर के लिए उपयोग किए गए उपसर्ग में परिवर्तन होता है। कुंजी सॉर्टिंग चालू करने से अतिरिक्त रूप से `regions` को `retry` से पहले रखा जा सकता है, लेकिन सरणी अभी भी `sg` फिर `us` पढ़ती है। एक उपयोगी समीक्षा दो चरणों में आउटपुट की जांच करती है: पहले पुष्टि करें कि नेस्टिंग और सरणी क्रम मूल मान का प्रतिनिधित्व करते हैं, फिर तय करें कि चुना गया रिक्त स्थान रिपॉजिटरी में फिट बैठता है या नहीं।

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

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

कैनोनिकल JSON योजनाएं सटीक सदस्य क्रम, संख्या वर्तनी और हस्ताक्षर या नियतात्मक हैश के लिए भागने को परिभाषित करके सामान्य स्वरूपण से आगे बढ़ती हैं। ToolAcre ऐसे किसी विहितीकरण मानक को लागू करने का दावा नहीं करता है। यह वैकल्पिक पुनरावर्ती कुंजी सॉर्टिंग के साथ JSON.parse और JSON.stringify का उपयोग करके पढ़ने योग्य ब्राउज़र-स्थानीय आउटपुट उत्पन्न करता है।

टेकअवे: प्रीटी-प्रिंटिंग एक रिक्त स्थान परिवर्तन है

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

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