abox.tools

भाषा: हिन्दी

दो JSON फ़ाइलों की तुलना कैसे करें

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

टेक्स्ट डिफ़ खोलें दो टेक्स्ट भीतर, हर फ़र्क निशान लगाकर बाहर, पंक्ति-दर-पंक्ति और शब्द-दर-शब्द। कुछ भी किसी और के सर्वर में चिपकाया नहीं जाता।

Markdown के रूप में देखें

छोटा जवाब

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

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

दोनों में से किसी पन्ने में कोई नेटवर्क सुविधा है ही नहीं — यह जानना काम का है, क्योंकि लोग जो JSON मिलाते हैं वह इतनी बार वही कॉन्फ़िग फ़ाइल होती है जिसमें क्रेडेंशियल अब भी पड़े हैं।

कच्चा JSON डिफ़ लगभग पूरा शोर क्यों है

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

दो सबसे बुरे मामले बात साफ़ कर देते हैं। मिनिफ़ाई की हुई फ़ाइल एक पंक्ति है, तो उसके खिलाफ़ डिफ़ एक विशाल बदली हुई पंक्ति है — सही और बेकार। और वही सामग्री दूसरे क्रम में रखने वाली दो फ़ाइलें सब-कुछ-बदला बनकर मिलती हैं, जबकि ईमानदार जवाब “कुछ नहीं” होता।

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

फ़ॉर्मैटर का मानक रूप क्या सुधारता है

दोनों फ़ाइलों को एक ही फ़ॉर्मैटर से, एक ही सेटिंग्स के साथ गुज़ारना वही है जो डिफ़ को चाहिए: हर दस्तावेज़ का एक हिज्जा।

एक ईमानदार चेतावनी: क्रमबद्ध नतीजा वह दस्तावेज़ है जिसकी कुंजियाँ खिसक चुकी हैं। आगे का कोई टूल कुंजियों के क्रम की परवाह करता हो — कम करते हैं, पर होते हैं — तो क्रमबद्ध प्रतियों को वह चीज़ मानिए जिनकी तुलना हुई, मूल की जगह लेने वाली नहीं।

नतीजा पढ़ना, और साथ ले जाना

डिफ़ हटी पंक्तियाँ बाईं ओर, जुड़ी पंक्तियाँ दाईं ओर दिखाता है, और बदली पंक्ति के भीतर अलग पड़ते शब्द उभार देता है — मानक रूप पर वह आम तौर पर वही एक मान होता है जो false से true चला गया। बिना बदला बीच का हिस्सा एक गिनती में सिमट जाता है, तो दो हज़ार पंक्तियों की कॉन्फ़िग तीन बदलावों के साथ तीन छोटे अंशों की तरह पढ़ी जाती है।

डाउनलोड एक यूनिफ़ाइड पैच है, एक .patch — वह फ़ॉर्मैट जो कोड-रिव्यू समझता है। वह मानक रूपों का वर्णन करता है, और रिव्यू को वैसे भी अक्सर यही चाहिए: बदलाव, दोबारा-फ़ॉर्मैटिंग के बिना।

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

एक JSON विन्यास के दो संस्करण आमने-सामने, बदली हुई पंक्तियाँ चिह्नित: एक संस्करण संख्या, दोबारा कोशिशों की गिनती, एक जुड़ा हुआ विकल्प और एक जुड़ा हुआ क्षेत्र।
चार असली अंतर, और कुछ नहीं बताया गया। पढ़ना आसान आधा है; काम ऊपर की सेटिंग ने किया।

अगर आप यह हर हफ़्ते करते हैं

दो बार फ़ॉर्मैट, दो बार चिपकाना — कदम दो पन्नों पर इसलिए रहते हैं कि हर पन्ना एक काम करता है, और हर एक अपने दम पर साबित कर सकता है कि आपके चिपकाए में से कुछ भी कहीं नहीं गया। मगर दोनों ओपन सोर्स हैं: MIT लाइसेंस, बिना निर्भरता के ES मॉड्यूल — फ़ॉर्मैटर का पार्सर कुंजियों का क्रम और अंक सँभालता है, डिफ़ Myers का एल्गोरिद्म है — हर एक के साथ उसे समझाने वाला README।

यह आपके दिन का हिस्सा हो, तो किसी कोडिंग एजेंट को रिपॉज़िटरी पर लगाइए और दो डिब्बों वाला ऐसा पन्ना माँगिए जो मिलाते-मिलाते मानक रूप भी देता चले — parseJson, printJson और compareText बस तीन import दूर हैं। ये मॉड्यूल पढ़े जाने के लिए लिखे गए हैं, और इन्हें उठा ले जाना ही तो वह चीज़ है जिसके लिए लाइसेंस बना है।