टूल
गाइड

JSON तुलना

JSON

दो JSON दस्तावेज़ों की तुलना करें और संरचनात्मक अंतर दिखाएँ।

100% क्लाइंट-साइड कोई बैकएंड नहीं
बायाँ (मूल)
दायाँ (परिवर्तित)
आउटपुट
इस पृष्ठ पर

JSON डिफ़ क्या है?#

एक JSON डिफ़ दो JSON दस्तावेज़ों की तुलना करता है और सटीक रूप से बताता है कि उनके बीच क्या बदला — कौन से फ़ील्ड आए, कौन से गायब हुए, और कौन से वही पाथ रखते हुए एक अलग वैल्यू ले लिया। यह एक टेक्स्ट डिफ़ का संरचनात्मक समतुल्य है, पर पंक्तियों के मिलान के बजाय यह ऑब्जेक्ट और ऐरे ट्री पर चलता है, इसलिए किसी वैल्यू का 1 से 2 में जाना किसी विशिष्ट पाथ पर एक सटीक संपादन के रूप में दिखता है, न कि टेक्स्ट के एक फिर से लिखे गए ब्लॉक के रूप में।

यह हर बार मायने रखता है जब JSON किसी ऐसी चीज़ के लिए वायर फ़ॉर्मेट हो जो विकसित होता है: डिप्लॉय के बीच API रिस्पॉन्स, रिवीज़न के बीच कॉन्फ़िग फ़ाइलें, टेस्ट सूट में फ़िक्स्चर, दिनों के बीच एक्सपोर्ट किया गया डेटा। दो प्रिंटी-प्रिंट किए गए ढेरों को साथ-साथ घूरना छोटे दस्तावेज़ों के लिए ही काम करता है; जैसे ही नेस्टिंग गहरी होती है, आपको अंतरों की सूची चाहिए।

पकड़ यह है कि JSON डिफ़ ऐरे के लिए क्रम-संवेदनशील है। दो ऐरे तभी बराबर होते हैं जब उनके तत्व पोज़िशन-दर-पोज़िशन मेल खाते हों, क्योंकि यही JSON खुद समानता परिभाषित करता है। तो [a, b] और [b, a] अलग हैं, और डिफ़ इसे रिपोर्ट करेगा — उपयोगी जब क्रम सार्थक हो (चरणों का अनुक्रम), आश्चर्यजनक जब नहीं (ऐरे का भेष धारण करता हुआ समुच्चय)।

इसका उपयोग कैसे करें#

  1. मूल दस्तावेज़ बायाँ (मूल) पैनल में और संशोधित दस्तावेज़ दायाँ (परिवर्तित) पैनल में चिपकाएँ।
  2. तुलना टाइप करते ही लाइव चलती है। आप बलपूर्वक रिफ़्रेश के लिए तुलना करें पर भी क्लिक कर सकते हैं।
  3. आउटपुट क्षेत्र हर अंतर को उसकी पंक्ति पर सूचीबद्ध करता है:
    • जोड़ा गया — पाथ केवल दाईं ओर मौजूद है; पंक्ति नया वैल्यू दिखाती है।
    • हटाया गया — पाथ केवल बाईं ओर मौजूद है; पंक्ति पुराना वैल्यू दिखाती है।
    • बदला गया — पाथ दोनों ओर मौजूद है पर अलग वैल्यू के साथ; पंक्ति old → new दिखाती है। हर पंक्ति के आगे JSONPath-शैली का पाथ जुड़ा होता है जैसे $.version या $.tags[2], ताकि आप इसे किसी भी दस्तावेज़ में ढूँढ सकें।
  4. यदि दोनों दस्तावेज़ गहराई से समान हैं, तो स्थिति पट्टी स्पष्ट रूप से ऐसा कहती है — “कोई अंतर नहीं” — बजाय इसके कि एक खाली पैनल को समझने के लिए छोड़ दे।
  5. नमूना एक यथार्थपरक पहले/बाद का जोड़ा लोड करता है; साफ़ करें दोनों पैनलों और परिणाम को रीसेट करता है।

प्रमुख विशेषताएँ#

  • संरचनात्मक, न कि टेक्स्टुअल। पार्स किए गए वैल्यू ट्री की तुलना करता है, इसलिए पुनः-इंडेंट, ऑब्जेक्ट कीज़ पुनर्व्यवस्थित करना, या व्हाइटस्पेस बदलना कभी कोई गलत अंतर पैदा नहीं करता।
  • सटीक पाथ। हर बदलाव अपने स्थान को JSONPath नोटेशन में ले जाता है — रूट के लिए $, ऑब्जेक्ट फ़ील्ड के लिए .key, ऐरे इंडेक्स के लिए [i] — ताकि आप सीधे सही जगह पर कूद सकें।
  • तीन बदलाव के प्रकार। जोड़ा गया, हटाया गया, और बदला गया अलग से रिपोर्ट किए जाते हैं और रंग-कोडित होते हैं, इसलिए जोड़ विलोपन से और संपादन एक नज़र में अलग दिखते हैं।
  • प्रति-पक्ष त्रुटि रिपोर्टिंग। यदि एक इनपुट वैध JSON नहीं है, तो स्थिति पट्टी बताती है कि कौन सा पक्ष विफल हुआ (Left input is not valid JSON.) बजाय अस्पष्ट रूप से विफल होने के।
  • लाइव तुलना। आप किसी भी पैनल को संपादित करते हुए डिफ़ अपडेट होता है, इसलिए किसी फ़िक्स्चर या रिस्पॉन्स पर पुनरावृत्ति तुरंत होती है।

कार्य उदाहरण#

नमूना लोड करें और दोनों पैनल एक संशोधन से पहले और बाद का एक छोटा कॉन्फ़िग दस्तावेज़ भर देते हैं:

{
  "name": "ArpGate",
  "version": 1,
  "tags": ["json", "encoding"],
  "features": { "static": true, "backend": null }
}

बाईं ओर, इसके विरुद्ध:

{
  "name": "ArpGate",
  "version": 2,
  "tags": ["json", "encoding", "crypto"],
  "features": { "static": true, "backend": false, "offline": true }
}

दाईं ओर। डिफ़ सटीक रूप से गिनता है कि क्या खिसका:

changed  $.version           1 → 2
added    $.tags[2]           "crypto"
changed  $.features.backend  null → false
added    $.features.offline  true

ध्यान दें कि क्या दिखाई नहीं देता: $.name (अपरिवर्तित), $.tags[0] और $.tags[1] (अपरिवर्तित), और $.features.static (अपरिवर्तित)। समान शाखाएँ कोई आउटपुट नहीं देतीं, इसलिए चार-पंक्ति का डिफ़ पूरी कहानी है भले ही दोनों दस्तावेज़ों में कई फ़ील्ड हों। यदि आप फिर दोनों पैनलों को एक ही दस्तावेज़ पर सेट करें, तो स्थिति पट्टी “कोई अंतर नहीं — इनपुट समान हैं” पर स्विच हो जाती है।

अक्सर पूछे जाने वाले प्रश्न#

पुनर्व्यवस्थित ऐरे पूरी तरह बदला हुआ क्यों दिखता है?#

JSON ऐरे क्रमबद्ध होते हैं, और समानता पोज़िशनल होती है। [1, 2] और [2, 1] इंडेक्स 0 और इंडेक्स 1 पर भिन्न होते हैं, इसलिए डिफ़ दो बदलाव रिपोर्ट करता है। यह उन अनुक्रमों के लिए सही है जहाँ क्रम सार्थक हो। यदि आपका ऐरे किसी समुच्चय का प्रतिनिधित्व करता है, तो तुलना से पहले दोनों दस्तावेज़ों में उसे क्रमबद्ध (या नॉर्मलाइज़) करें — अन्यथा मूव्स संपादन जैसे दिखेंगे।

क्या यह तब नोटिस करता है जब किसी ऑब्जेक्ट की कुंजी का नाम बदल दिया जाता है?#

यह एक हटाने और एक जोड़ के रूप में रिपोर्ट करता है, क्योंकि JSON में “यह की वह की बन गई” व्यक्त करने का कोई तरीका नहीं। enabled को active में नाम बदलना removed $.enabled और added $.active के रूप में दिखता है — दो पंक्तियाँ, न कि एक “नाम-बदलाव”। यह डेटा में क्या बदला उसका ईमानदार प्रतिनिधित्व है।

टाइप बदलाव कैसा दिखता है?#

यह एक changed पंक्ति के रूप में रिपोर्ट किया जाता है। यदि कोई वैल्यू स्ट्रिंग "36" से नंबर 36 में जाता है, तो डिफ़ उस पाथ पर "36" → 36 दिखाता है — भिन्न सीरियलाइज़ेशन टाइप की चपेट को दृश्य बनाता है। यही null के false होने, या नंबर के ऑब्जेक्ट होने पर भी लागू होता है।

क्या यह बता सकता है कि कौन से फ़ील्ड अपरिवर्तित हैं?#

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