บทความทั้งหมด

JSON Diff: การเปรียบเทียบเชิงโครงสร้างต่างจากการเปรียบเทียบข้อความอย่างไร

หากเปรียบเทียบเอกสาร JSON สองฉบับด้วย diff ข้อความทั่วไป (แบบที่ใช้กับโค้ด) ผลลัพธ์มักทำให้เข้าใจผิด: ข้อมูลชุดเดียวกันสามารถเขียนด้วยลำดับคีย์ที่ต่างกัน การเยื้องที่ต่างกัน หรือจำนวนช่องว่างที่ต่างกัน — และ diff ข้อความจะแสดง "ความแตกต่าง" ในจุดที่ข้อมูลจริง ๆ เหมือนกันทุกประการ

การเปรียบเทียบเชิงโครงสร้าง

JSON Diff เชิงโครงสร้างจะแยกวิเคราะห์เอกสารทั้งสองเป็นโครงสร้างต้นไม้ของค่า และเปรียบเทียบข้อมูลจริง: ฟิลด์มีอยู่หรือไม่ มีค่าอะไร ประเภทตรงกันหรือไม่ ลำดับคีย์ของอ็อบเจกต์ ช่องว่างส่วนเกิน หรือรูปแบบการเยื้องจะไม่ถูกนำมาพิจารณา — สิ่งเหล่านี้ไม่ใช่ส่วนหนึ่งของข้อมูลเอง

diff แสดงอะไร

ผลลัพธ์ทั่วไปของการเปรียบเทียบเชิงโครงสร้างจะเน้นการเปลี่ยนแปลงสามประเภท: ฟิลด์ที่เพิ่มเข้ามาในเอกสารที่สอง ฟิลด์ที่ถูกลบออกจากเอกสารแรก และฟิลด์ที่มีอยู่ในทั้งสองแต่มีค่าต่างกัน สำหรับอาร์เรย์ การเปรียบเทียบซับซ้อนกว่า — ต้องตัดสินใจว่าจะเปรียบเทียบองค์ประกอบตามตำแหน่งหรือพยายามจับคู่อ็อบเจกต์ที่คล้ายกัน

เหตุใดจึงจำเป็น

  • เปรียบเทียบการตอบกลับ API ก่อนและหลังการเปลี่ยนแปลงใน backend เพื่อดูความแตกต่างของข้อมูลที่แท้จริง
  • ตรวจสอบว่าการเปลี่ยนแปลงในไฟล์การตั้งค่าไม่ได้กระทบสิ่งที่ไม่ตั้งใจ
  • ค้นหาการถดถอยในการทดสอบที่ JSON ที่คาดหวังกับ JSON จริงแตกต่างกัน

ทำไมการอ่าน diff ของข้อความไทยถึงยากกว่าที่คิด

ภาษาไทยไม่มีการเว้นวรรคระหว่างคำและไม่มีแนวคิดตัวพิมพ์ใหญ่-เล็ก ซึ่งเป็นสิ่งที่คนอ่าน diff ภาษาอังกฤษหรือภาษาที่ใช้อักษรละตินมักใช้เป็นจุดสังเกตด้วยสายตาเมื่อสแกนหาจุดที่เปลี่ยนแปลงในบรรทัดยาว ๆ เมื่อ diff เชิงโครงสร้างไฮไลต์ค่าที่เปลี่ยนในฟิลด์ข้อความภาษาไทยยาว ๆ ผู้ตรวจสอบจึงต้องอ่านทั้งประโยคอย่างละเอียดแทนที่จะกวาดสายตาหาคำที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่หรือช่องว่างที่เปลี่ยนไป นี่คือเหตุผลที่การไฮไลต์ตำแหน่งที่เปลี่ยนแปลงแบบละเอียดในเครื่องมือ diff มีประโยชน์กับข้อความไทยมากเป็นพิเศษ

การเปรียบเทียบอาร์เรย์: ตามตำแหน่งหรือตามคีย์

วิธีที่ง่ายที่สุดคือเปรียบเทียบสมาชิกของอาร์เรย์ทีละดัชนี แต่หากมีการแทรกสมาชิกใหม่เข้ากลางอาร์เรย์ ตำแหน่งที่เหลือทั้งหมดจะ "เลื่อน" และ diff จะแสดงว่าทุกสมาชิกหลังจุดแทรกเปลี่ยนแปลง ทั้งที่จริง ๆ มีเพียงสมาชิกเดียวที่เปลี่ยน เครื่องมือที่ฉลาดกว่าจะพยายามจับคู่สมาชิกตามฟิลด์เฉพาะตัว (เช่น id) เพื่อแสดงเฉพาะการแทรกหรือการลบจริง ๆ แทนที่จะเป็นความแตกต่างปลอมต่อเนื่อง

ลองใช้เครื่องมือ