tigtools

JSON Diff

วางเอกสาร JSON สองชุดเพื่อดูว่าค่าใดต่างกันบ้าง โดยแสดงตามพาธ เช่น $.order.items[2].price

ทำงานในเบราว์เซอร์ของคุณ ไม่ต้องสมัคร

เปรียบเทียบอาร์เรย์
แสดง

วิธีใช้งาน

  1. วาง JSON ต้นฉบับไว้ด้านซ้ายและ JSON ที่เปลี่ยนแปลงไว้ด้านขวา หรือลองใช้ตัวอย่าง
  2. เลือกวิธีเปรียบเทียบอาร์เรย์: แบบตามตำแหน่ง หรือแบบจับคู่รายการ เพื่อให้รายการที่ถูกแทรกถูกรายงานเพียงครั้งเดียว
  3. อ่านผลต่างแบบรายการหรือแบบเทียบข้างกัน แต่ละผลต่างมีพาธจากราก ($)
  4. คัดลอกรายงานไปวางในตั๋วงานหรือรีวิวโค้ด

วิธีการทำงาน

เอกสารทั้งสองจะถูกแยกวิเคราะห์และเปรียบเทียบในฐานะข้อมูล ไม่ใช่ข้อความ ออบเจกต์ถูกเปรียบเทียบทีละคีย์ ลำดับของคีย์และช่องว่างหรือการเยื้องจึงไม่มีผล ตัวเลขถูกเปรียบเทียบด้วยค่า ดังนั้น 1 และ 1.0 จึงเท่ากัน

ความแตกต่างแต่ละรายการมี path ที่เขียนแบบนิพจน์ JSONPath: $ คือราก, .name คือพร็อพเพอร์ตี้, [2] คือดัชนีอาร์เรย์ และคีย์ที่ไม่ใช่ชื่อธรรมดาจะถูกใส่เครื่องหมายคำพูด เช่น $["first-name"] รายงานความแตกต่าง 4 ประเภท: เพิ่ม (เฉพาะฝั่งขวา), ลบ (เฉพาะฝั่งซ้าย), เปลี่ยนแปลง (ชนิดเดียวกันแต่ค่าต่างกัน) และเปลี่ยนชนิด (เช่น ตัวเลข 44.9 กลายเป็นสตริง "44.90" หรือค่ากลายเป็น null) เมื่อออบเจกต์หรืออาร์เรย์ทั้งชุดถูกเพิ่มหรือลบ จะรายงานครั้งเดียวที่ path ของมัน แทนที่จะรายงานทีละฟิลด์

อาร์เรย์ถูกเปรียบเทียบตามตำแหน่งโดยค่าเริ่มต้น: รายการที่ 0 กับรายการที่ 0 รายการที่ 1 กับรายการที่ 1 หากมีรายการแทรกที่ตำแหน่งแรก รายการถัดไปทั้งหมดจะดูเหมือนเปลี่ยนไป “จับคู่รายการที่ย้าย” จะจัดเรียงอาร์เรย์ทั้งสองให้ตรงกันก่อนโดยใช้ลำดับย่อยร่วมที่ยาวที่สุดของรายการที่เท่ากัน ทำให้การแทรกหรือลบถูกรายงานเพียงครั้งเดียว และรายการที่เหลือจะถูกจับคู่กัน รายการที่เพิ่มใช้ดัชนีฝั่งขวา รายการที่ลบใช้ดัชนีฝั่งซ้าย การจับคู่จะถูกข้ามสำหรับอาร์เรย์ขนาดใหญ่มาก (เกินประมาณ 2 ล้านคู่รายการ) ซึ่งจะเปรียบเทียบตามตำแหน่งแทน

รายการ path ของคีย์ถูกเรียงลำดับตามตัวอักษรภายในแต่ละออบเจกต์ แสดงความแตกต่างได้สูงสุด 2,000 รายการ ส่วนรายงานที่คัดลอกจะมีครบทั้งหมดเสมอ

ตัวอย่าง

ตรวจสอบการเปลี่ยนแปลงของ API

เปรียบเทียบการตอบกลับของเมื่อวานกับวันนี้สำหรับคำสั่งซื้อเดียวกัน ผลต่างจะแสดง $.status เปลี่ยนจาก "pending" เป็น "shipped", $.total เปลี่ยนชนิดจากตัวเลขเป็นสตริง, $.coupon ถูกลบ และ $.customer.phone ถูกเพิ่ม

การคลาดเคลื่อนของ configuration

วาง config JSON จาก staging และ production เนื่องจากลำดับคีย์ไม่มีผล จึงเห็นเฉพาะความแตกต่างจริง เช่น $.cache.ttl 300 → 60 แม้ว่าไฟล์จะถูกบันทึกด้วยเครื่องมือต่างกันก็ตาม

ลิสต์ที่มีสมาชิกถูกแทรก

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

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

ต่างจากการเปรียบเทียบข้อความอย่างไร

การเปรียบเทียบข้อความเทียบทีละบรรทัด การสลับลำดับคีย์หรือการจัดรูปแบบใหม่จึงแสดงเป็นการเปลี่ยนแปลง เครื่องมือนี้เปรียบเทียบข้อมูลที่แยกวิเคราะห์แล้ว จึงรายงานเฉพาะความแตกต่างของค่า ชนิดข้อมูล และโครงสร้างเท่านั้น

ทำไมอาร์เรย์จึงแสดงการเปลี่ยนแปลงจำนวนมากหลังการแทรกรายการเดียว

ในโหมด “ตามตำแหน่ง” รายการจะถูกเปรียบเทียบที่ดัชนีเดียวกัน และการแทรกหนึ่งรายการจะทำให้รายการถัดไปขยับทั้งหมด เปลี่ยนเป็น “จับคู่รายการที่ย้าย” เพื่อจัดรายการที่เท่ากันก่อน

“1” กับ 1 ถือว่าเท่ากันหรือไม่

ไม่ ค่าหนึ่งเป็นสตริงและอีกค่าเป็นตัวเลข จึงรายงานความแตกต่างเป็นการเปลี่ยนชนิดข้อมูล ค่าที่มีชนิดข้อมูลเดียวกันจะถูกเปรียบเทียบแบบตรงค่า

เปรียบเทียบไฟล์ขนาดใหญ่มากได้ไหม

ไฟล์ขนาดไม่กี่เมกะไบต์ทำได้ แต่ทุกอย่างประมวลผลในหน่วยความจำของเบราว์เซอร์ เอกสารขนาดใหญ่มากอาจช้าบนมือถือ

ความเป็นส่วนตัว

เอกสารทั้งสองถูกแยกวิเคราะห์และเปรียบเทียบในเบราว์เซอร์ของคุณเท่านั้น ไม่มีการอัปโหลด จัดเก็บ หรือรวมอยู่ในข้อมูลวิเคราะห์