ตัวสร้าง 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 สองชุดแล้วสร้างแพตช์
- วาง JSON ต้นฉบับไว้ทางซ้าย
- วาง JSON ที่แก้ไขแล้วไว้ทางขวา
- กดสร้าง แล้วคัดลอกแพตช์
คำถามที่พบบ่อย
เครื่องมือนี้ส่งข้อมูลของฉันไปที่ไหนหรือไม่
ไม่ เอกสารทั้งสองชุดอยู่ในเบราว์เซอร์ของคุณ และแพตช์ถูกสร้างบนเครื่องของคุณเอง
ผลลัพธ์เป็นไปตาม 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