JSON ডিফ

দুটি JSON ডকুমেন্ট লাইন অনুযায়ী নয়, কাঠামো অনুযায়ী তুলনা করুন। যোগ, মুছে ফেলা এবং পরিবর্তিত পথ রিপোর্ট করে, অ্যারে অর্ডার উপেক্ষা করার বিকল্পসহ। সম্পূর্ণ আপনার ব্রাউজারে চলে।

লাইন দিয়ে নয়, কাঠামো দিয়ে তুলনা করুন। দুটি ডকুমেন্ট পেস্ট করুন এবং কী যোগ, মুছে ফেলা বা পরিবর্তিত হয়েছে তার একটি পথ-ভিত্তিক রিপোর্ট পান। যেহেতু তুলনা পার্স করা মানগুলো হেঁটে যায়, রিফরম্যাটিং বা কী পুনর্বিন্যাস একটি পার্থক্য হিসেবে দেখায় না।

পার্থক্যসমূহ

কেন JSON-এর জন্য একটি টেক্সট ডিফ ভুল টুল

লাইন ডিফ ফরম্যাটিং দেখে, অর্থ নয়

একটি স্ট্যান্ডার্ড লাইন-ভিত্তিক ডিফ JSON-কে গদ্য হিসেবে বিবেচনা করে। একটি ফাইলকে দুই স্পেস থেকে চার স্পেসে রিইন্ডেন্ট করুন এবং প্রতিটি লাইন পরিবর্তিত হিসেবে চিহ্নিত হয়। একটি অবজেক্টের উপরে থেকে নীচে একটি কী সরান এবং আপনি একটি মুছে ফেলা প্লাস একটি সন্নিবেশ পান, যদিও পার্স করা মানটি হুবহু একই। একটি লম্বা অ্যারেকে একটি একক লাইনে মোড়ান এবং পুরো ব্লকটি জ্বলে ওঠে।

একটি স্ট্রাকচারাল ডিফ প্রথমে উভয় পাশ পার্স করে এবং তারপর ফলস্বরূপ মানগুলো হেঁটে যায়। তুলনা শুরু হওয়ার সময় ফরম্যাটিং, কী অর্ডার এবং হোয়াইটস্পেস চলে গেছে, তাই রিপোর্ট করা যেতে পারে কেবল ডেটার প্রকৃত পার্থক্য। এটিই আউটপুটকে যথেষ্ট সংক্ষিপ্ত করে তোলে যাতে আসলেই পড়া যায়।

লাইন নম্বর নয়, পথ

এখানে প্রতিটি পার্থক্য user.roles[2] বা meta.updated-এর মতো একটি পথের বিরুদ্ধে রিপোর্ট করা হয়। একটি পথ ডকুমেন্টের অন্য কোথাও সম্পাদনা থেকে বেঁচে থাকে, যা লাইন নম্বর করে না, তাই আপনি একই রিপোর্ট একটি টিকিট বা কোড রিভিউতে পেস্ট করতে পারেন এবং এটি এক সপ্তাহ পরেও সঠিক জায়গায় নির্দেশ করে।

তিনটি অপারেশন ম্যাপ করে একটি গাছের সাথে আসলে কী ঘটতে পারে। বাম দিকে উপস্থিত কিন্তু ডানে নয় এমন একটি কী মুছে ফেলা, বিপরীতটি যোগ, এবং উভয়ে ভিন্ন মানসহ উপস্থিত একটি কী পরিবর্তন। টাইপ পরিবর্তন — একটি ক্ষেত্র যা আগে সংখ্যা 1 ছিল এবং এখন স্ট্রিং "1" —ও পরিবর্তন হিসেবে রিপোর্ট করা হয়, এবং সেগুলো মনোযোগ দেওয়ার মতো, কারণ সেগুলো ডাউনস্ট্রিম বাগের একটি সাধারণ উৎস যা কোনো স্কিমা চেক ধরে না।

অ্যারে এবং অর্ডারিং প্রশ্ন

অ্যারে যেখানে স্ট্রাকচারাল ডিফিং মতামতপ্রবণ হয়ে ওঠে। ডিফল্টভাবে তুলনাটি অবস্থানগত: বাম দিকে ইনডেক্স 0 ডান দিকে ইনডেক্স 0-এর সাথে তুলনা করা হয়। এটি ধাপের ক্রমের মতো অর্ডার করা ডেটার জন্য সঠিক, কিন্তু একটি তালিকার জন্য বিভ্রান্তিকর ফলাফল দেয় যা আসলে একটি সেট — উপাদানগুলো পুনর্বিন্যাস করুন এবং প্রতিটি অবস্থান পরিবর্তিত দেখায়।

ইগনোর-অ্যারে-অর্ডার বিকল্পটি তুলনার আগে অ্যারে গভীরভাবে সর্ট করে উভয় পাশকে প্রমিত করে, তাই একটি পুনর্বিন্যাস করা তালিকা সমান হিসেবে তুলনা করে। ট্যাগ তালিকা, পারমিশন সেট এবং কোনো নিশ্চিত অর্ডার ছাড়া ক্যোয়ারি ফলাফলের জন্য এটি ব্যবহার করুন। যখনই একটি উপাদানের অবস্থান অর্থ বহন করে তখন এটি বন্ধ রাখুন, কারণ এটি চালু থাকলে একটি প্রকৃত পুনর্বিন্যাস বাগ অদৃশ্য হয়ে যায়।

ওপেন-সোর্স নোট: কোনো তৃতীয়-পক্ষের লাইব্রেরি ছাড়াই ভ্যানিলা JavaScript-এ বাস্তবায়িত।

সচরাচর জিজ্ঞাসা

এটি কীভাবে একটি সাধারণ টেক্সট ডিফ থেকে আলাদা?
একটি টেক্সট ডিফ লাইন তুলনা করে, তাই রিইন্ডেন্টিং বা কী পুনর্বিন্যাস একটি পরিবর্তন হিসেবে দেখায়। এই টুলটি প্রথমে উভয় পাশ পার্স করে, তাই শুধুমাত্র ডেটার প্রকৃত পার্থক্য রিপোর্ট করা হয়।
+, - এবং ~ প্রতীকগুলোর অর্থ কী?
প্লাস হলো এমন একটি পথ যা কেবল পরিবর্তিত ডকুমেন্টে উপস্থিত, মাইনাস কেবল মূল ডকুমেন্টে উপস্থিত, এবং টিল্ডা হলো উভয়ে ভিন্ন মানসহ উপস্থিত একটি পথ।
একটি পুনর্বিন্যাস করা অ্যারে কেন পরিবর্তিত হিসেবে রিপোর্ট করা হয়?
ডিফল্টভাবে অ্যারে অবস্থান অনুযায়ী তুলনা করা হয়, যা অর্ডার করা ডেটার জন্য সঠিক। পরিবর্তে সেগুলোকে অ-অর্ডারকৃত সেট হিসেবে তুলনা করতে ইগনোর অ্যারে অর্ডার চালু করুন।
একটি অবজেক্টে কী অর্ডার কি গুরুত্বপূর্ণ?
না। অবজেক্ট কী অনুযায়ী তুলনা করা হয়, তাই একটি অবজেক্টের ভিতরে একটি ক্ষেত্র সরানো কখনো পার্থক্য সৃষ্টি করে না। শুধুমাত্র অ্যারে উপাদানের অবস্থান অর্ডার-সংবেদনশীল।
একটি সংখ্যা যা স্ট্রিং হয়ে গেছে তা কি পতাকাঙ্কিত হয়?
হ্যাঁ। একটি টাইপ পরিবর্তন একটি পরিবর্তন হিসেবে রিপোর্ট করা হয়, যা ইচ্ছাকৃত: 1 এবং "1" ডাউনস্ট্রিমে খুব ভিন্নভাবে আচরণ করে এবং অন্যথায় অমিলটি সহজে মিস হয়।
আমার ডকুমেন্টগুলো কি সার্ভারে পাঠানো হয়?
না। উভয় পাশ আপনার ব্রাউজারে পার্স এবং তুলনা করা হয়, তাই কিছুই আপলোড, লগ বা সংরক্ষণ করা হয় না।