JSON डिफ
दो JSON डॉक्यूमेंट्स पेस्ट करें और देखें कि उनके बीच कौन-सी कीज़ जोड़ी गईं, हटाई गईं, या बदली गईं।
यह कैसे काम करता है
दोनों तरफ़ को JSON के रूप में पार्स किया जाता है, फिर की-बाय-की और इंडेक्स-बाय-इंडेक्स कंपेयर किया जाता है। सिर्फ़ दाईं तरफ़ मौजूद कीज़ एडिशन हैं, सिर्फ़ बाईं तरफ़ मौजूद कीज़ रिमूवल हैं, और दोनों तरफ़ अलग-अलग वैल्यूज़ के साथ मौजूद कीज़ चेंजेज़ हैं। ऑब्जेक्ट कीज़ का ऑर्डर मायने नहीं रखता, सिर्फ़ वैल्यूज़ मायने रखती हैं।
यह कैसे काम करता है
दोनों तरफ़ पहले JSON.parse से गुज़रती हैं, इसलिए अगर कोई एक वैलिड JSON नहीं है, तो आपको एक कचरा डिफ़ के बजाय पार्सर का अपना एरर मैसेज मिलता है जो समस्या की ओर इशारा करता है। कंपैरिज़न फिर दोनों पार्स की गई स्ट्रक्चर्स को रिकर्सिवली चलता है: ऑब्जेक्ट्स के लिए यह दोनों की सेट्स का यूनियन लेता है और हर की में रिकर्स करता है, ऐरेज़ के लिए यह इंडेक्स-बाय-इंडेक्स कंपेयर करता है, और लीफ़ वैल्यूज़ को बराबर तभी माना जाता है जब वे बिल्कुल एक जैसी सीरियलाइज़ हों। हर अंतर को user.address[1].zip जैसे पाथ के रूप में एडेड, रिमूव्ड, या चेंज्ड टैग के साथ जारी किया जाता है, फिर काउंट्स में समराइज़ किया जाता है।
क्योंकि डिफ़ टेक्स्ट के बजाय पार्स की गई वैल्यूज़ पर चलता है, फ़ॉर्मैटिंग इनविज़िबल होती है: इंडेंटेशन, की ऑर्डर, और व्हाइटस्पेस के अंतर से बिल्कुल भी शोर पैदा नहीं होता, जो लाइन-बेस्ड टेक्स्ट डिफ़ के मुक़ाबले पूरा मक़सद है। समझने लायक ट्रेडऑफ़ है ऐरे अलाइनमेंट। यह पोज़िशनल है, इसलिए एक लंबे ऐरे के आगे एक एलिमेंट इंसर्ट करने पर हर आगे वाला इंडेक्स "changed" के रूप में रिपोर्ट होता है, साथ ही आख़िर में एक एडिशन। जब आप ऐसी बहुत सारी चेंज्ड एंट्रीज़ की दीवार देखें जो सभी एक से शिफ़्ट हुई लगें, तो इसे "इस ऐरे में शुरुआत में कुछ इंसर्ट या रिमूव हुआ" के रूप में पढ़ें, दर्जनों इंडिपेंडेंट एडिट्स के रूप में नहीं।
पार्सिंग और कंपैरिज़न पूरी तरह इस पेज के JavaScript में होते हैं। डेवटूल्स का Network टैब खोलें और Compare दबाएं: कोई रिक्वेस्ट आपका JSON नहीं ले जाती, इसलिए सीक्रेट्स वाले API रिस्पॉन्सेज़ और कॉन्फ़िग फ़ाइलें आपकी मशीन पर ही रहती हैं।