JSON Diff: เปรียบเทียบ JSON Object
วางเอกสาร JSON สองชุดเพื่อดูว่าอะไรเปลี่ยนไปบ้าง ทุกความแตกต่างแสดงตาม path เช่น $.users[2].email และการจัดรูปแบบหรือลำดับคีย์จะไม่ทำให้แจ้งเตือนผิดพลาด
ทำงานในเบราว์เซอร์ไม่ต้องสมัครไม่มีการอัปโหลด
path ที่เปลี่ยน
| การเปลี่ยนแปลง | Path | ค่าเดิม | ค่าใหม่ |
|---|
วิธีใช้ JSON Diff
- วาง JSON ต้นฉบับทางซ้ายและ JSON ที่แก้ไขทางขวา หรือเปิดไฟล์สองไฟล์
- ข้อผิดพลาดทางไวยากรณ์จะแสดงใต้แต่ละช่องพร้อมบรรทัดและคอลัมน์ เพื่อให้แก้ไขได้อย่างรวดเร็ว
- อ่านตาราง path ที่เปลี่ยน: แต่ละแถวแสดงว่าค่าถูกเพิ่ม ลบ หรือเปลี่ยน พร้อมค่าเดิมและค่าใหม่
- ติ๊ก ไม่สนใจลำดับใน array เมื่อรายการเป็นเซต เช่น แท็กหรือสิทธิ์การเข้าถึง
- เลื่อนไปที่มุมมองเคียงข้างกันเพื่อดูการเปลี่ยนแปลงในบริบท หรือคัดลอกรายการการเปลี่ยนแปลงเป็น 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 หรือไม่?
{"a":1,"b":2} และ {"b":2,"a":1} จะถูกรายงานว่าเท่ากัน ส่วนลำดับใน array มีผลเป็นค่าเริ่มต้นเพราะ array มีลำดับ แต่คุณปิดได้ด้วย ไม่สนใจลำดับใน arrayJSON ของฉันถูกอัปโหลดไปยังเซิร์ฟเวอร์หรือไม่?
path อย่าง $.users[2].email หมายถึงอะไร?
$ คือ root ของเอกสาร .users คือคีย์ และ [2] คือสมาชิกตัวที่สามของ array (index เริ่มจาก 0) คีย์ที่มีช่องว่างหรืออักขระพิเศษจะเขียนในวงเล็บเหลี่ยม เช่น $["first name"]1 เท่ากับ 1.0 หรือไม่?
1 และ "1" ต่างกัน และจะถูกรายงานว่าเปลี่ยน