JSON डिफ़ / कम्पेयर टूल

दो JSON डॉक्यूमेंट्स पेस्ट करें और देखें कि उनके बीच बिल्कुल क्या बदला - हर जोड़ी, हटाई या बदली गई की (key), किसी भी गहराई पर, उसके एग्ज़ैक्ट पाथ से पहचानी गई जैसे user.address.city या items[2].price। एक सादे टेक्स्ट डिफ़ के उलट, यहाँ की का क्रम और फिर से फ़ॉर्मेट की गई व्हाइटस्पेस कभी फ़र्क़ नहीं मानी जाती - सिर्फ़ असली डेटा मायने रखता है।

4 अंतर+2 जोड़ा गया~2 बदला गया
  • जोड़ा गयाdiscontinued

    + false

  • बदला गयाprice

    − 19.99

    + 24.99

  • जोड़ा गयाtags[2]

    + "sale"

  • बदला गयाversion

    − "1.2.0"

    + "1.3.0"

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

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

यह एक सामान्य टेक्स्ट डिफ़ से कैसे अलग है?

टेक्स्ट डिफ़ (जैसे इस साइट का अपना टेक्स्ट डिफ़ चेकर) दो टेक्स्ट ब्लॉक्स को लाइन-दर-लाइन कम्पेयर करता है - उसे नहीं पता कि JSON क्या है, इसलिए किसी डॉक्यूमेंट को दोबारा फ़ॉर्मेट करना, उसकी कीज़ को दोबारा क्रम में लगाना, या इंडेंटेशन बदलना बदली हुई लाइनों की दीवार दिखा देता है भले ही अंदरूनी डेटा बिल्कुल एक जैसा हो। यह टूल पहले दोनों तरफ़ को असली JSON के रूप में पार्स करता है, फिर बने हुए स्ट्रक्चर्स को कम्पेयर करता है - तो {"a":1,"b":2} और "b" को "a" से पहले लिस्ट करने वाला एक फ़ॉर्मेटेड वर्ज़न सही तरीक़े से बिना किसी फ़र्क़ के रिपोर्ट होते हैं। सिर्फ़ असली जोड़, घटाव और वैल्यू बदलाव दिखाए जाते हैं।

"बदली हुई" वैल्यू और "टाइप बदली" वैल्यू में क्या फ़र्क़ है?

"बदली हुई" का मतलब है कि उस पाथ पर वैल्यू अभी भी उसी JSON टाइप की है लेकिन उसकी वैल्यू अलग है - एक नंबर जो 5 से 6 हो गया, या एक स्ट्रिंग जो "ड्राफ़्ट" से "पब्लिश्ड" हो गई। "टाइप बदली" का मतलब है कि टाइप ख़ुद अलग है - जो फ़ील्ड पहले बूलियन थी अब स्ट्रिंग है, या नंबर null बन गया। यह फ़र्क़ प्रैक्टिकल तौर पर काफ़ी मायने रखता है: टाइप बदलने से उस फ़ील्ड को पढ़ने वाला कोड टूटने की संभावना कहीं ज़्यादा होती है (बूलियन एक्सपेक्ट करने वाला फ़ंक्शन अगर अचानक स्ट्रिंग पाए तो ग़लत बर्ताव करेगा), इसलिए यह टूल इसे सामान्य वैल्यू अपडेट के साथ मिलाने के बजाय अलग से फ़्लैग करता है।

ऐरे कैसे कम्पेयर होते हैं?

आइटम-दर-आइटम, क्रम में: इंडेक्स 0 बनाम इंडेक्स 0, इंडेक्स 1 बनाम इंडेक्स 1, वगैरह, और लंबे ऐरे के आख़िर में बचे किसी भी एक्स्ट्रा आइटम को जोड़ा या हटाया गया रिपोर्ट किया जाता है। यह सिंपल और प्रेडिक्टेबल है, लेकिन इसका मतलब है कि ऐरे के बीच में कोई नया आइटम डालने से उसके बाद के सभी आइटम बदले हुए दिखेंगे, भले ही वे असल में एक जैसे हों - क्योंकि वे सभी एक पोज़िशन खिसक गए हैं। यह पोज़िशन-आधारित ऐरे कम्पेयरिज़न की आम सीमा है (सिर्फ़ इस टूल की नहीं), तो जिन ऐरे का क्रम बदल सकता है, उनके लिए यह देखना अक्सर मददगार होता है कि रिपोर्ट किए गए "बदले हुए" आइटम असल में अलग हैं या सिर्फ़ खिसके हैं।

अगर मेरा JSON इनवैलिड हो तो क्या होगा?

आपके ब्राउज़र के अपने JSON पार्सर द्वारा बनाई गई एग्ज़ैक्ट पार्स एरर उस टेक्स्टएरिया के नीचे दिखाई जाती है, बजाय चुपचाप फ़ेल होने या पुराना नतीजा दिखाने के। आम वजहें हैं किसी ऑब्जेक्ट या ऐरे के आख़िरी आइटम के बाद एक्स्ट्रा कॉमा (JavaScript ऑब्जेक्ट लिटरल्स में वैलिड, JSON में इनवैलिड), की नाम के चारों ओर मिसिंग कोट्स, या कोई भटका हुआ कमेंट - JSON में JavaScript या JSON5 के उलट कमेंट की कोई सिंटैक्स ही नहीं होती।

क्या मैं इसका इस्तेमाल API रिस्पॉन्स कम्पेयर करने के लिए कर सकता हूँ?

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

क्या कीज़ के दिखने का क्रम मायने रखता है?

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

क्या मेरा JSON डेटा कहीं भेजा जाता है?

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

क्या मैं बहुत बड़ी JSON फ़ाइलें कम्पेयर कर सकता हूँ?

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

क्या यह JSON कॉन्फ़िग फ़ाइलों के लिए git diff की जगह ले सकता है?

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

अगर दोनों डॉक्यूमेंट्स की रूट टाइप अलग हो, जैसे एक ऐरे बनाम एक ऑब्जेक्ट?

यह तब भी काम करता है - अगर सबसे ऊपर का लेवल ही शेप में अलग हो (एक तरफ़ ऑब्जेक्ट, दूसरी तरफ़ ऐरे, या दोनों में से किसी के मुक़ाबले एक प्रिमिटिव वैल्यू), तो इसे टूल द्वारा कोई ऐसा कम्पेयरिज़न ज़बरदस्ती करने के बजाय एक ही रूट-लेवल फ़र्क़ के रूप में रिपोर्ट किया जाता है जिसका कोई मतलब न हो। वही लॉजिक जो किसी नेस्टेड फ़ील्ड के टाइप बदलाव को फ़्लैग करता है रूट पर भी लागू होता है: इसे दो JSON डॉक्यूमेंट्स के बीच सबसे बुनियादी तरह का फ़र्क़ माना जाता है।

क्या यह मेरे JSON को वैलिडेट या फ़ॉर्मेट भी करता है?

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

संबंधित टूल