YamlBox

JSON उपकरण · 6 मिनट पढ़ें

JSON अंतर: डेटा की तुलना उस तरह से करना जैसे वह वास्तव में

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

अद्यतन

टेक्स्ट डिफरेंस JSON पर विफल क्यों होता है

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

इसके बजाय एक संरचनात्मक तुलना रिपोर्ट क्या है

एक JSON अंतर दोनों दस्तावेज़ों को पार्स करता है, परिणामी पेड़ों पर चलता है, और पथ के आधार पर परिवर्तनों की रिपोर्ट करता है: जोड़ी गई कुंजियाँ, हटाई गई कुंजियाँ, मान जो प्रकार या सामग्री बदल गए, और सरणी प्रविष्टियाँ जो स्थानांतरित हो गईं। आउटपुट स्थानांतरित संदर्भ की बीस पंक्तियों के बजाय `spec.replicas: 3 → 5` जैसा पढ़ता है। यह वह जानकारी है जिसकी आपको तब आवश्यकता होती है जब कोई परिनियोजन अलग तरीके से व्यवहार करता है और आप जानना चाहते हैं कि कॉन्फ़िगरेशन में वास्तव में क्या बदलाव हुआ है।

                - spec.template.spec.containers[0].image
+   ghcr.io/acme/web:1.4.2 → ghcr.io/acme/web:1.5.0
- metadata.annotations["deployed-by"]   (removed)
              

वास्तविक कार्य में JSON अंतर का उपयोग करना

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

क्रम सरणियों के लिए मायने रखता है, वस्तुओं के लिए नहीं: एक पुन: व्यवस्थित सरणी एक वास्तविक परिवर्तन है, जबकि एक पुन: क्रमित वस्तु नहीं है। एक संरचनात्मक JSON अंतर अंतर जानता है; एक पाठ अंतर कभी नहीं होगा.

जानने लायक व्यावहारिक विवरण

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

पेलोड स्थानीय रखें

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

JSON अंतर - अक्सर पूछे जाने वाले प्रश्न

क्या कुंजी आदेश JSON अंतर को प्रभावित करता है?

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

मैं उन दो JSON फ़ाइलों की तुलना कैसे करूँ जो मान्य नहीं हैं?

उन्हें पहले वैध होना होगा. दोनों को फ़ॉर्मेटर या वैलिडेटर के माध्यम से चलाएँ, रिपोर्ट की गई लाइन और कॉलम को ठीक करें, फिर तुलना करें। विकृत इनपुट पर अंतर ऐसे अंतर उत्पन्न करता है जो वास्तविक डेटा परिवर्तनों के बजाय सिंटैक्स त्रुटि के कारण होते हैं।

क्या कोई JSON अंतर वे मान दिखा सकता है जो जोड़े गए या हटाए गए थे?

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

इस पोस्ट में उल्लिखित उपकरण

19 टूल की पूरी सूची ब्राउज़ करें

पढ़ने के लिए और लेख

6 मिनट पढ़ें

JSON फ़ॉर्मेटर: सुंदर, छोटा, और वास्तव में मान्य

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

6 मिनट पढ़ें

JSON से JSON स्कीमा: नमूना पेलोड से अनुबंध तक

ब्राउज़र में JSON को JSON स्कीमा में कनवर्ट करें: वास्तविक पेलोड से एक ड्राफ्ट का अनुमान लगाएं, फिर आवश्यक फ़ील्ड, प्रारूप और एनम को सख्त करें - साथ ही अनुमान की सीमाएं भी।

सभी 19 पोस्ट →