JSON Diff หมายถึงการเปรียบเทียบชุดข้อมูล JSON สองชุดเพื่อค้นหาฟิลด์ที่เพิ่ม ลบ และแก้ไขระหว่างกัน ในการพัฒนาประจำวัน เรามักจำเป็นต้องทราบว่า 'JSON สองตัวแตกต่างกันตรงไหน': มีอะไรเปลี่ยนแปลงในโครงสร้างการตอบสนองก่อนและหลังอัปเกรด API คอนฟิกแตกต่างกันตรงไหนในสภาพแวดล้อมสองแห่ง ฟิลด์ใดเบี่ยงเบนระหว่างผลลัพธ์จริงและเกณฑ์ที่คาดหวังในการทดสอบอัตโนมัติ การตรวจสอบทีละบรรทัดด้วยตนเองช้าและมีโอกาสผิดพลาดสูง เครื่องมือ JSON Diff สามารถไฮไลท์ความแตกต่างโดยอัตโนมัติ
การเปรียบเทียบความแตกต่าง JSON โดยทั่วไปมีสองแนวทาง หนึ่งคือ 'ความแตกต่างของข้อความ' (textual diff): หลังจากจัดรูปแบบ JSON เป็นข้อความหลายบรรทัดมาตรฐานแล้ว ทำการเปรียบเทียบคล้าย Git diff ทีละบรรทัด แสดงการเพิ่ม ลบ และแก้ไขของแต่ละบรรทัดอย่างชัดเจน อีกแนวทางหนึ่งคือ 'ความแตกต่างเชิงโครงสร้าง/ความหมาย' (structural diff): แยกวิเคราะห์ JSON เป็นโครงสร้างต้นไม้ และเปรียบเทียบค่าและประเภททีละรายการตามพาธฟิลด์ (เช่น user.address.city) โดยไม่ได้รับผลกระทบจากลำดับการเขียนฟิลด์ การเยื้อง หรือปัจจัยการจัดรูปแบบอื่นๆ เครื่องมือนี้มีทั้งมุมมองข้อความและมุมมองความหมาย สามารถสลับได้ตามต้องการ
ทำไมต้องจัดรูปแบบก่อนเปรียบเทียบ? เนื่องจากข้อมูลชุดเดียวกันอาจมีการจัดรูปแบบที่แตกต่างกันทั้งหมด (หนึ่งบรรทัดเทียบกับหลายบรรทัด เยื้อง 2 ช่องเทียบกับ 4 ช่อง) หากเปรียบเทียบโดยตรงตามข้อความดั้งเดิม จะเกิด 'ความแตกต่างเท็จ' จำนวนมากที่เกิดจากการเปลี่ยนแปลงการจัดรูปแบบ เครื่องมือนี้จะแยกวิเคราะห์และจัดรูปแบบ JSON ทั้งสองข้างอย่างสม่ำเสมอก่อนเปรียบเทียบโดยอัตโนมัติ ดังนั้นจะขจัดการรบกวนจากอักขระช่องว่าง ทำให้คุณเห็นเฉพาะการเปลี่ยนแปลงข้อมูลที่มีความหมายอย่างแท้จริง
ควรทราบว่าลำดับคีย์ในออบเจ็กต์ JSON ไม่มีความสำคัญในเชิงความหมาย ({"a":1,"b":2} เทียบเท่ากับ {"b":2,"a":1}) แต่ลำดับองค์ประกอบอาร์เรย์มีความสำคัญ ([1,2] แตกต่างจาก [2,1]) ดังนั้นเมื่อคุณสนใจเฉพาะความสอดคล้องของเนื้อหาอาร์เรย์โดยไม่คำนึงถึงลำดับ แนะนำให้เรียงลำดับอาร์เรย์หรือเรียงลำดับคีย์ก่อนเปรียบเทียบ เพื่อหลีกเลี่ยงการเปลี่ยนแปลงลำดับถูกระบุผิดว่าเป็นความแตกต่าง
การจัดรูปแบบและการเปรียบเทียบทั้งหมดในเครื่องมือนี้ทำในเครื่องเบราว์เซอร์ ข้อมูลจะไม่ถูกอัปโหลดไปยังเซิร์ฟเวอร์ รองรับไฮไลท์ระดับตัวอักษร การนับจำนวนการเพิ่ม/ลบ/แก้ไข การเปรียบเทียบหลายแท็บพร้อมกัน และการแชร์สถานการณ์การเปรียบเทียบผ่าน URL เหมาะสำหรับการเชื่อมต่อ API เปรียบเทียบคอนฟิก การยืนยันการทดสอบ และการตรวจสอบโค้ด