JSON Diff: เปรียบเทียบ JSON Object

วางเอกสาร JSON สองชุดเพื่อดูว่าอะไรเปลี่ยนไปบ้าง ทุกความแตกต่างแสดงตาม path เช่น $.users[2].email และการจัดรูปแบบหรือลำดับคีย์จะไม่ทำให้แจ้งเตือนผิดพลาด

ทำงานในเบราว์เซอร์ไม่ต้องสมัครไม่มีการอัปโหลด

ไม่สนใจลำดับคีย์เสมอ

วิธีใช้ JSON Diff

  1. วาง JSON ต้นฉบับทางซ้ายและ JSON ที่แก้ไขทางขวา หรือเปิดไฟล์สองไฟล์
  2. ข้อผิดพลาดทางไวยากรณ์จะแสดงใต้แต่ละช่องพร้อมบรรทัดและคอลัมน์ เพื่อให้แก้ไขได้อย่างรวดเร็ว
  3. อ่านตาราง path ที่เปลี่ยน: แต่ละแถวแสดงว่าค่าถูกเพิ่ม ลบ หรือเปลี่ยน พร้อมค่าเดิมและค่าใหม่
  4. ติ๊ก ไม่สนใจลำดับใน array เมื่อรายการเป็นเซต เช่น แท็กหรือสิทธิ์การเข้าถึง
  5. เลื่อนไปที่มุมมองเคียงข้างกันเพื่อดูการเปลี่ยนแปลงในบริบท หรือคัดลอกรายการการเปลี่ยนแปลงเป็น JSON

ทำไม diff JSON เชิงโครงสร้างจึงดีกว่า diff ข้อความ

diff ข้อความธรรมดาเปรียบเทียบอักขระและบรรทัด ไฟล์ JSON สองไฟล์ที่มีข้อมูลเดียวกันจึงอาจดูต่างกันโดยสิ้นเชิง หากไฟล์หนึ่งถูกย่อ เยื้องต่างกัน หรือมีลำดับคีย์ต่างกัน เครื่องมือนี้พาร์สเอกสารทั้งสองก่อนแล้วเปรียบเทียบ ข้อมูล: object ถูกเปรียบเทียบทีละคีย์โดยไม่สนใจลำดับ และตัวเลข สตริง boolean และ null ถูกเปรียบเทียบตามค่า จึงรายงานเฉพาะการเปลี่ยนแปลงจริงเท่านั้น

การรายงานการเปลี่ยนแปลง

แต่ละความแตกต่างจะมีตำแหน่งแบบ JSONPath เช่น $.owner.email หรือ $.items[3].price และมีหนึ่งในสามประเภท:

  • เพิ่ม: คีย์หรือสมาชิกของ array มีอยู่เฉพาะใน JSON ที่แก้ไข
  • ลบ: มีอยู่เฉพาะใน JSON ต้นฉบับ
  • เปลี่ยน: มีอยู่ทั้งสองฝั่งแต่ค่าต่างกัน รวมถึงการเปลี่ยนชนิด เช่น สตริงกลายเป็นตัวเลข

array ถูกจัดเรียงให้ตรงกันด้วยอัลกอริทึม longest common subsequence การแทรกสมาชิกหนึ่งตัวที่ต้นรายการจึงถูกรายงานเป็นการเพิ่มเพียงครั้งเดียว แทนที่จะทำเครื่องหมายว่าสมาชิกถัดไปทั้งหมดถูกเปลี่ยน

การไม่สนใจลำดับใน array

API จำนวนมากส่งคืนรายการที่ลำดับไม่มีความหมาย เช่น บทบาท แท็ก หรือ ID เมื่อเปิด ไม่สนใจลำดับใน array array จะถูกเปรียบเทียบเป็นกลุ่ม: สมาชิกจะนับว่าเพิ่มหรือลบก็ต่อเมื่อไม่มีสมาชิกที่เท่ากันอยู่อีกฝั่ง มุมมองเคียงข้างกันจะเรียงสมาชิกของ array เพื่อให้รายการที่เท่ากันอยู่ตรงกัน

การใช้งานทั่วไป

เปรียบเทียบ API response ระหว่าง staging และ production ตรวจสอบว่า migration เปลี่ยนอะไรในไฟล์ config รีวิวความแตกต่างระหว่างไฟล์ package.json หรือ tsconfig สองไฟล์ และดีบัก snapshot test

คำถามที่พบบ่อย

ลำดับคีย์มีผลเมื่อเปรียบเทียบ JSON หรือไม่?
ไม่ JSON object ไม่มีลำดับ ดังนั้น {"a":1,"b":2} และ {"b":2,"a":1} จะถูกรายงานว่าเท่ากัน ส่วนลำดับใน array มีผลเป็นค่าเริ่มต้นเพราะ array มีลำดับ แต่คุณปิดได้ด้วย ไม่สนใจลำดับใน array
JSON ของฉันถูกอัปโหลดไปยังเซิร์ฟเวอร์หรือไม่?
ไม่ เอกสารทั้งสองถูกพาร์สและเปรียบเทียบในเบราว์เซอร์ของคุณ ไม่มีข้อมูลใดส่งผ่านเครือข่าย เครื่องมือนี้จึงปลอดภัยสำหรับ API response ที่มีโทเค็นหรือข้อมูลลูกค้า
path อย่าง $.users[2].email หมายถึงอะไร?
$ คือ root ของเอกสาร .users คือคีย์ และ [2] คือสมาชิกตัวที่สามของ array (index เริ่มจาก 0) คีย์ที่มีช่องว่างหรืออักขระพิเศษจะเขียนในวงเล็บเหลี่ยม เช่น $["first name"]
1 เท่ากับ 1.0 หรือไม่?
เท่ากัน ทั้งสองพาร์สได้เป็นตัวเลขเดียวกัน จึงไม่ถูกรายงานว่าต่างกัน ส่วนตัวเลขกับสตริง เช่น 1 และ "1" ต่างกัน และจะถูกรายงานว่าเปลี่ยน
เปรียบเทียบ JSON ที่มีคอมเมนต์หรือจุลภาคต่อท้ายได้ไหม?
JSON มาตรฐานไม่อนุญาตสิ่งเหล่านี้ ข้อมูลแบบนั้นจะถูกแจ้งพร้อมบรรทัดและคอลัมน์ที่แน่นอน ให้ลบคอมเมนต์หรือจุลภาคออก หรือทำความสะอาดเอกสารใน JSON Formatter ก่อน

เครื่องมือที่เกี่ยวข้อง