ตัวสร้าง JSON Patch

เปรียบเทียบเอกสาร JSON สองชุดแล้วรับแพตช์ตาม RFC 6902 ที่เปลี่ยนชุดแรกให้เป็นชุดที่สอง ทุกอย่างทำงานในเบราว์เซอร์ของคุณ

เครื่องมือนี้ทำอะไร


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

ใช้เมื่อไร


ใช้สร้างเนื้อหาของคำขอ PATCH ใช้บันทึกว่ามีอะไรเปลี่ยนไปบ้างระหว่างไฟล์ตั้งค่าสองรุ่น หรือใช้เก็บร่องรอยการตรวจสอบที่เล็กกว่าการเก็บสำเนาเต็มทุกชุดมาก อีกทั้งยังเป็นวิธีรวดเร็วในการหาว่าเอกสารสองชุดที่ดูเหมือนกันนั้นต่างกันตรงไหนจริง ๆ

การดำเนินการที่มันสร้างขึ้น


การดำเนินการความหมาย
addเพิ่มค่าในที่ซึ่งยังไม่มีค่าอยู่ หรือแทรกเข้าไปในอาร์เรย์
removeลบค่าที่ตำแหน่งนั้น
replaceเขียนทับค่าที่ตำแหน่งซึ่งมีอยู่แล้ว
moveย้ายค่าจากตำแหน่งหนึ่งไปยังอีกตำแหน่งหนึ่ง
copyคัดลอกค่าไปยังอีกตำแหน่งหนึ่ง
testตรวจค่าหนึ่งและยกเลิกแพตช์ทั้งหมดหากไม่ตรงกัน

เครื่องมือนี้เขียนเพียง add, remove และ replace เท่านั้น สามอย่างนี้เพียงพอจะอธิบายการเปลี่ยนแปลงใด ๆ และแพตช์ที่อ่านได้ทีละบรรทัดมีค่ามากกว่าแพตช์ที่สั้นกว่าแต่ต้องนั่งขบคิด อีกสามอย่างก็เป็นส่วนหนึ่งของ RFC 6902 และเซิร์ฟเวอร์ที่ทำตามมาตรฐานย่อมรับได้

เส้นทางทำงานอย่างไร


แต่ละเส้นทางคือ JSON Pointer (RFC 6901): เส้นทางที่คั่นด้วยเครื่องหมายทับเริ่มจากรากของเอกสาร โดย “/address/zipCode” หมายถึงฟิลด์ zipCode ที่อยู่ภายใน address ตำแหน่งในอาร์เรย์เป็นตัวเลข “/skills/0” จึงเป็นรายการแรก ส่วนขีดกลางหมายถึงท้ายอาร์เรย์: “/skills/-” คือการต่อท้าย เนื่องจากเครื่องหมายทับเป็นตัวคั่น คีย์ที่มีเครื่องหมายทับอยู่จึงเขียนเป็น ~1 และทิลเดอตัวจริงเขียนเป็น ~0

ข้อสังเกตเกี่ยวกับผลลัพธ์


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

วิธีสร้าง JSON Patch


วางเอกสาร JSON สองชุดแล้วสร้างแพตช์

  1. วาง JSON ต้นฉบับไว้ทางซ้าย
  2. วาง JSON ที่แก้ไขแล้วไว้ทางขวา
  3. กดสร้าง แล้วคัดลอกแพตช์

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


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

ผลลัพธ์เป็นไปตาม RFC 6902 หรือไม่
ใช่ ทุกการดำเนินการเป็นอ็อบเจกต์ที่มี op, path และ — สำหรับ add กับ replace — value ส่วนเส้นทางคือ JSON Pointer ตามที่ RFC 6901 กำหนด

มีการดำเนินการ move และ copy ด้วยไหม
ไม่มี มันเขียนเพียง add, remove และ replace ซึ่งเพียงพอต่อการเปลี่ยนแปลงใด ๆ และอ่านง่ายกว่ามาก การ move ก็คือ remove ตามด้วย add นั่นเอง

จะนำแพตช์ไปใช้อย่างไร
ส่งไปยัง API ที่รับ application/json-patch+json หรือใช้ไลบรารี: jsonpatch ใน Python, json-patch ใน JavaScript, JsonPatchDocument ใน .NET, json-patch ใน Java และอื่น ๆ

ต่างจาก JSON Merge Patch อย่างไร
JSON Merge Patch (RFC 7386) มีหน้าตาเหมือนตัวเอกสารเอง โดย null หมายถึง “ลบ” ทำให้อ่านง่าย แต่ไม่สามารถเก็บค่า null จริง ๆ หรือแก้ไขรายการเดียวในอาร์เรย์ได้ ส่วน JSON Patch ยาวกว่าแต่แสดงได้ทุกอย่าง

Wikipedia — JSON Patch
Wikipedia — JSON
Wikipedia — Patch (computing)
Wikipedia — Diff
Wikipedia — REST