วิธีสร้าง JSON Schema
- วางตัวอย่าง JSON ที่เป็นตัวแทนของข้อมูลจริง อาร์เรย์ที่มีหลายรายการจะให้ผลดีที่สุด เพราะรายการทั้งหมดจะถูกรวมเป็น schema เดียว
- เลือกเวอร์ชันของ schema (draft 2020-12 หรือ draft-07) และเลือกว่าจะกำหนดพร็อพเพอร์ตีเป็น required ตรวจจับ format และไม่อนุญาตพร็อพเพอร์ตีเพิ่มเติมหรือไม่
- คัดลอกหรือดาวน์โหลด schema แล้วปรับแต่งเพิ่มเติมด้วยตัวเอง – เช่น เพิ่มคำอธิบาย enum หรือค่าต่ำสุดและสูงสุด
สิ่งที่ JSON Schema Generator อนุมานให้
| ตัวอย่าง JSON | Schema |
|---|---|
"ada@example.com" | {"type": "string", "format": "email"} |
"2026-05-01T10:00:00Z" | format date-time (รวมถึง date, time, uri, uuid, ipv4) |
42 / 4.5 | "integer" / "number" |
| คีย์ที่มีอยู่ในทุกอ็อบเจ็กต์ | อยู่ในรายการ required |
| คีย์ที่ไม่มีในบางรายการของอาร์เรย์ | ไม่บังคับ (ไม่อยู่ใน required) |
[1, "a", null] | "items": {"type": ["string", "integer", "null"]} |
| อ็อบเจ็กต์ที่ปนกับค่าธรรมดา | anyOf โดยแยกหนึ่ง schema ต่อแต่ละชนิด |
JSON Schema คืออะไร?
JSON Schema คือชุดคำศัพท์สำหรับอธิบายและตรวจสอบโครงสร้างของข้อมูล JSON: มีพร็อพเพอร์ตีใดบ้าง แต่ละตัวเป็นชนิดอะไร ตัวไหนจำเป็น และอนุญาตค่าอะไรบ้าง ใช้สำหรับกำหนดสัญญา API ใน OpenAPI ไฟล์คอนฟิก การสร้างฟอร์ม และการตรวจสอบเอาต์พุตแบบมีโครงสร้างจากโมเดล AI เวอร์ชันปัจจุบันคือ 2020-12 ส่วน draft-07 ยังได้รับการรองรับในเครื่องมือรุ่นเก่าหลายตัว ข้อกำหนดฉบับเต็มเผยแพร่อยู่ที่ json-schema.org
ปรับแต่ง schema ที่สร้างขึ้น
- เพิ่ม
titleและdescriptionเพื่ออธิบายความหมายของแต่ละฟิลด์ - จำกัดค่าด้วย
enum,minimum,maximum,maxLengthหรือpattern - ติ๊ก ไม่อนุญาตพร็อพเพอร์ตีเพิ่มเติม (
additionalProperties: false) เพื่อปฏิเสธคีย์ที่ไม่รู้จัก - ตรวจสอบข้อมูลด้วย Ajv ใน JavaScript หรือแพ็กเกจ
jsonschemaใน Python
คำถามที่พบบ่อย
ควรใช้ JSON Schema เวอร์ชันไหน?
ใช้ draft 2020-12 สำหรับโปรเจกต์ใหม่ – เป็นเวอร์ชันปัจจุบันและเป็นพื้นฐานของ OpenAPI 3.1 เลือก draft-07 หาก validator หรือเครื่องมือของคุณยังไม่รองรับ 2020-12
ทำไมพร็อพเพอร์ตีทั้งหมดถึงเป็น required?
เมื่อมีอ็อบเจ็กต์ตัวอย่างเพียงตัวเดียว ทุกพร็อพเพอร์ตีจะปรากฏอยู่ จึงถูกกำหนดเป็น required ทั้งหมด ให้ใช้อาร์เรย์ที่มีตัวอย่างหลากหลายหลายรายการ หรือปิดตัวเลือก กำหนดพร็อพเพอร์ตีเป็น required
Generator ตรวจจับ enum หรือช่วงค่าได้ไหม?
ไม่ได้ ตัวอย่างเพียงชุดเดียวไม่สามารถบอกได้ว่าโดยทั่วไปอนุญาตค่าอะไรบ้าง ดังนั้น enum ค่าต่ำสุดและสูงสุด และ pattern ต้องเพิ่มด้วยตัวเอง
ตรวจสอบ JSON กับ schema ได้อย่างไร?
ใช้ไลบรารี validator เช่น Ajv สำหรับ JavaScript หรือ jsonschema สำหรับ Python นอกจากนี้โค้ดเอดิเตอร์หลายตัวยังตรวจสอบไฟล์ JSON กับ schema ที่อ้างอิงในพร็อพเพอร์ตี $schema ให้ด้วย