JSON Schema Generator: สร้าง JSON Schema จากตัวอย่าง JSON ได้ในคลิกเดียว
คู่มือใช้งาน JSON Schema Generator เครื่องมือสร้าง JSON Schema (Draft 2020-12, 2019-09, Draft-07) จากตัวอย่าง JSON พร้อม type inference, required fields และตรวจจับ string format อัตโนมัติ
Table of Contents
ใครที่เคยเขียน JSON Schema ด้วยตัวเองคงรู้ดีว่ามันเป็นงานที่ใช้เวลาไม่น้อย ต้องนั่งกำหนด type ของแต่ละ field เขียน properties ซ้อนกันเป็นชั้น ๆ แล้วก็มานั่งคิดว่า field ไหนควรเป็น required บ้าง ถ้า JSON ของคุณมีสิบหรือร้อย field ก็ยิ่งเป็นงานที่ทั้งน่าเบื่อและเสี่ยงต่อความผิดพลาด
JSON Schema Generator คือเครื่องมือจาก Online Tools Forge ที่ถูกสร้างมาแก้ปัญหานี้โดยตรง เพียงแค่วางตัวอย่าง JSON ลงไป คุณก็จะได้ JSON Schema ที่สมบูรณ์ทันที รองรับทั้ง Draft 2020-12, 2019-09 และ Draft-07 พร้อม type inference อัตโนมัติ การกำหนด required fields และการตรวจจับ string format เช่น email, uuid หรือ date-time โดยไม่ต้องเขียนเองแม้แต่บรรทัดเดียว
ในบทความนี้ เราจะพาไปดูว่าทำไมเครื่องมือนี้ถึงมีประโยชน์ ฟีเจอร์เด่นมีอะไรบ้าง วิธีใช้งานทีละขั้นตอน ความแตกต่างของ JSON Schema แต่ละ Draft และกรณีใช้งานจริงที่ developer นำไปประยุกต์ใช้ได้ทันที
ทำไมต้องใช้ JSON Schema Generator
- ประหยัดเวลา — การสร้าง schema จากตัวอย่าง JSON ใช้เวลาเพียงไม่กี่วินาที แทนที่จะต้องนั่งเขียน property ทีละตัวด้วยมือ
- ลดความผิดพลาดจาก human error — การเขียน schema เองอาจพิมพ์ type ผิดหรือลืม field บาง field ได้ การ inference อัตโนมัติจากข้อมูลจริงจึงแม่นยำกว่า
- รองรับหลาย Drafts — ไม่ว่าทีมของคุณจะใช้ Draft 2020-12, 2019-09 หรือ Draft-07 ก็เลือกได้ตามต้องการ โดยเครื่องมือจะตั้งค่า $schema URI ให้อัตโนมัติ
- Type inference อัจฉริยะ — แยกแยะชนิดข้อมูลอัตโนมัติ ทั้ง string, number, integer, boolean, object, array และ null
- ตรวจจับ string format อัตโนมัติ — จำแนกข้อมูลพิเศษอย่าง email, uuid, date-time, uri และ ipv4 แล้วเพิ่ม format ที่เหมาะสมให้ทันที
- ทำงาน client-side ทั้งหมด — ข้อมูลของคุณไม่ถูกส่งออกจาก browser ปลอดภัยสำหรับข้อมูลสำคัญหรือข้อมูลภายในบริษัท
ฟีเจอร์เด่น
| ฟีเจอร์ | รายละเอียด |
|---|---|
| รองรับ 3 Drafts | Draft 2020-12, 2019-09 และ Draft-07 พร้อมตั้งค่า $schema URI อัตโนมัติ |
| Type inference | ตรวจจับชนิดข้อมูลอัตโนมัติ: string, number, integer, boolean, object, array, null |
| String format detection | ตรวจจับ date-time, date, time, email, uuid, uri, ipv4 (เปิด/ปิดได้ด้วยตัวเลือก Detect formats) |
| Array item merging | รวม schema ของสมาชิกใน array — union ของ properties, intersection ของ required fields |
| All fields required | บังคับทุก field เป็น required หรือเฉพาะ field ที่ปรากฏในทุก object |
| additionalProperties toggle | ควบคุมว่าอนุญาต field เกินหรือไม่ (ค่าเริ่มต้น false) |
| Client-side processing | ทำงานทันทีใน browser ไม่ส่งข้อมูลออกภายนอก |
รายละเอียดฟีเจอร์ที่น่าสนใจ:
- Array item merging — เมื่อ array ของคุณมี object หลายตัว เครื่องมือจะรวม schema ของสมาชิกทุกตัวเป็น items เดียว โดย properties จะเป็น union ของ field ทั้งหมด แต่ required จะเหลือเฉพาะ field ที่พบในทุกสมาชิก ทำให้ schema สะท้อนโครงสร้างข้อมูลจริงได้อย่างแม่นยำ
- additionalProperties ค่าเริ่มต้นเป็น false — ช่วยบังคับ contract แบบเข้มงวด ไม่ให้มี field เกินเข้ามาในข้อมูล ถ้าต้องการ schema ที่ยืดหยุ่นขึ้นก็สลับตัวเลือกนี้ได้
- ตัวเลือก Detect formats — ควบคุมได้ว่าจะให้เพิ่ม format กับ string field หรือไม่ หากข้อมูลของคุณไม่ได้เป็นรูปแบบมาตรฐานหรือต้องการ validation ที่ผ่อนปรน ก็ปิดตัวเลือกนี้ได้
วิธีใช้งาน
- เตรียมตัวอย่าง JSON — คัดลอก JSON ที่ต้องการกำหนด schema จะเป็น object เดียวหรือ array ของ object ก็ได้ ยิ่งตัวอย่างครอบคลุมมาก schema ที่ได้ยิ่งแม่นยำ
- วาง JSON ลงในช่อง input — เปิดหน้าเครื่องมือแล้ววาง JSON ลงไป
- เลือก Draft และตั้งค่าตัวเลือก — เลือก Draft 2020-12, 2019-09 หรือ Draft-07 ตามที่ต้องการ แล้วตั้งค่าตัวเลือกต่าง ๆ เช่น All fields required, additionalProperties และ Detect formats
- กด Generate — เครื่องมือจะสร้าง JSON Schema ให้ทันที ทั้งหมดทำงานใน browser ของคุณ
- คัดลอก schema ไปใช้งาน — นำ schema ที่ได้ไปใช้ในโปรเจกต์ ไม่ว่าจะเป็น validation, เอกสาร OpenAPI หรือ code generation
ตัวอย่างเช่น กับ JSON ตัวอย่างนี้
{
"id": "9f1c2a4e-7b3d-4f6a-8e2c-1d5b9a0f3c7e",
"name": "สมชาย ใจดี",
"email": "[email protected]",
"age": 29,
"is_active": true,
"created_at": "2026-08-19T10:30:00Z",
"tags": ["developer", "bangkok"],
"address": {
"city": "Bangkok",
"zipcode": "10110"
}
}
เมื่อเลือก Draft 2020-12 และใช้ตัวเลือกค่าเริ่มต้น จะได้ schema หน้าตาแบบนี้
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string",
"format": "email"
},
"age": {
"type": "integer"
},
"is_active": {
"type": "boolean"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"address": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"zipcode": {
"type": "string"
}
},
"required": ["city", "zipcode"],
"additionalProperties": false
}
},
"required": ["id", "name", "email", "age", "is_active", "created_at", "tags", "address"],
"additionalProperties": false
}
สังเกตว่าเครื่องมือเพิ่ม format: "uuid" ให้ field id, format: "email" ให้ email และ format: "date-time" ให้ created_at โดยอัตโนมัติ ส่วน object ซ้อนอย่าง address ก็ถูกจัดการให้ครบทั้ง properties และ required
ทำความเข้าใจ JSON Schema Drafts
JSON Schema มีวิวัฒนาการมาหลายเวอร์ชัน เรียกว่า Draft ซึ่งเครื่องมือนี้รองรับสามเวอร์ชันหลักที่ใช้งานกันแพร่หลาย
- Draft 2020-12 — มาตรฐานล่าสุด ใช้ $schema URI เป็น https://json-schema.org/draft/2020-12/schema มาพร้อมฟีเจอร์ใหม่อย่าง $dynamicRefและprefixItems สำหรับ tuple validation เหมาะกับโปรเจกต์ใหม่ที่อยากใช้มาตรฐานปัจจุบัน
- Draft 2019-09 — เวอร์ชันกลางที่มีฟีเจอร์อย่าง $recursiveRef และ $anchor เหมาะกับทีมที่เริ่มใช้เวอร์ชันนี้ไปแล้วและต้องการคงความเข้ากันได้
- Draft-07 — เวอร์ชันเก่าแต่ยังถูกใช้งานมากที่สุด library และเครื่องมือจำนวนมากยังคง default เป็น Draft-07 ถ้าต้องทำงานกับเครื่องมือรุ่นเก่า นี่คือตัวเลือกที่ปลอดภัยที่สุด
เลือกอย่างไร: ถ้าเริ่มโปรเจกต์ใหม่และเครื่องมือใน ecosystem รองรับ แนะนำ Draft 2020-12 แต่ถ้าต้องใช้กับ library หรือระบบเดิมที่มีอยู่ เลือก Draft-07 เพื่อความเข้ากันได้สูงสุด
Type inference คืออะไร
Type inference คือการอนุมานชนิดข้อมูลของแต่ละ field จากค่าจริงในตัวอย่างโดยอัตโนมัติ
- ค่าข้อความ เช่น "hello" → string
- ค่าทศนิยม เช่น 19.99 → number
- ค่าจำนวนเต็ม เช่น 29 → integer
- ค่า true หรือ false → boolean
- object ซ้อน เช่น { "city": "Bangkok" } → object
- รายการค่า เช่น ["a", "b"] → array
- ค่า null → null
เมื่อ field มีค่าหลายรูปแบบในหลายตัวอย่าง เครื่องมือจะสร้าง type ที่ครอบคลุมทุกกรณีให้ ทำให้ schema ไม่ reject ข้อมูลที่ถูกต้อง
Required fields ทำงานอย่างไร
โดยปกติ field ทุกตัวที่พบในตัวอย่างจะถูกตั้งเป็น required เพราะถือว่า field ที่ปรากฏในตัวอย่างคือ field ที่ต้องมีเสมอ นอกจากนี้ตัวเลือก All fields required ยังมีสองพฤติกรรมให้เลือก
- บังคับทั้งหมด — ทุก field เป็น required ไม่ว่าปรากฏใน object ครบทุกตัวหรือไม่
- เฉพาะ field ที่พบในทุก object — เมื่อมีตัวอย่างหลาย object จะเฉพาะ field ที่พบในทุก object เท่านั้นที่เป็น required ส่วน field ที่พบแค่บางตัวจะกลายเป็น optional
พฤติกรรมหลังทำงานคู่กับ array item merging ได้อย่างลงตัว ตัวอย่างเช่น
{
"orders": [
{ "id": 1, "item": "coffee", "note": "no sugar" },
{ "id": 2, "item": "tea" }
]
}
schema ของ items ใน array จะมี properties เป็น union ของ field ทั้งหมด (id, item, note) แต่ required จะเป็น intersection คือเฉพาะ id กับ item ที่พบในทุกสมาชิก ส่วน note กลายเป็น field เสริมที่ไม่บังคับ
String format detection
ค่า string หลายประเภทมีรูปแบบเฉพาะที่ตรวจสอบได้ลึกกว่าการเป็น string ธรรมดา เมื่อเปิดตัวเลือก Detect formats เครื่องมือจะตรวจสอบค่าด้วย pattern ที่เหมาะสมแล้วเพิ่ม format ให้ทันที
- 2026-08-19T10:30:00Z → format: "date-time"
- 2026-08-19 → format: "date"
- 10:30:00 → format: "time"
- [email protected] → format: "email"
- 9f1c2a4e-7b3d-4f6a-8e2c-1d5b9a0f3c7e → format: "uuid"
- https://example.com/page → format: "uri"
- 192.168.1.1 → format: "ipv4"
การเพิ่ม format ทำให้ schema มีประโยชน์มากขึ้นในการ validation เพราะตรวจสอบได้ไม่ใช่แค่ type แต่ยังรวมถึงรูปแบบของข้อมูลด้วย
กรณีใช้งานจริง
1. API contract validation
เมื่อพัฒนา REST API คุณสามารถใช้ JSON Schema เพื่อตรวจสอบ request ที่เข้ามาและ response ที่ส่งออก แทนที่จะเขียน schema เองจาก spec ก็เพียงนำ response จริงจาก API มา generate schema แล้วใช้กับ validator อย่าง Ajv ได้ทันที ช่วยดักจับความผิดพลาดเมื่อข้อมูลไม่ตรง contract ก่อนหลุดไปถึง production
2. OpenAPI documentation
OpenAPI (Swagger) ใช้ JSON Schema ในการอธิบาย data model ถ้ามีตัวอย่าง response ของ API อยู่แล้ว คุณสามารถ generate schema แล้วนำไปวางในส่วน components/schemas ของ OpenAPI spec ได้เลย ช่วยประหยัดเวลาและมั่นใจว่าเอกสารตรงกับข้อมูลจริง เพียงเลือก Draft ให้สอดคล้องกับเวอร์ชัน OpenAPI ที่ใช้ (OpenAPI 3.1 ใช้ JSON Schema ที่สอดคล้องกับ Draft 2020-12)
3. Config validation
โปรเจกต์ที่ใช้ไฟล์ config เป็น JSON สามารถ generate schema จากไฟล์ config ที่ใช้งานอยู่จริง แล้วนำไป validate ทุกครั้งที่มีการแก้ไข config เมื่อใช้ร่วมกับ editor ที่รองรับ JSON Schema ยังได้ autocomplete และคำเตือนข้อผิดพลาดระหว่างแก้ไขไฟล์อีกด้วย
4. Code generation
เครื่องมือหลายตัวสามารถแปลง JSON Schema เป็น TypeScript types, Go structs, Java classes หรือ Python dataclasses ได้ การเริ่มจากตัวอย่าง JSON แล้ว generate schema ก่อน ทำให้ได้ workflow ที่ type-safe ตั้งแต่ต้นทาง: ตัวอย่าง JSON → schema → types → นำไปใช้ในโค้ดพร้อม autocomplete และการตรวจสอบ type
Best Practices
- ใช้ตัวอย่าง JSON ที่ครอบคลุม — ตัวอย่างข้อมูลยิ่งครบทุก field และทุกกรณี schema ที่ได้ยิ่งแม่นยำและสมบูรณ์
- ตรวจสอบ required fields ด้วยตัวเองเสมอ — การ inference อัตโนมัติตัดสิน required จากตัวอย่าง ถ้า field บางตัวเป็น optional ในทางปฏิบัติ ควรตรวจทานและปรับก่อนนำไปใช้จริง
- เลือก Draft ให้ตรงกับ ecosystem — ตรวจสอบว่า library และเครื่องมือในโปรเจกต์รองรับ Draft ไหน แล้วเลือกให้ตรงกันเพื่อหลีกเลี่ยงปัญหาความเข้ากันได้
- เปิด Detect formats เมื่อต้องการ validation เข้มงวด — การเพิ่ม format ช่วยดักจับข้อมูลผิดรูปแบบ แต่ถ้าข้อมูลของคุณไม่ได้เป็นรูปแบบมาตรฐาน อาจต้องปิดตัวเลือกนี้
- ใช้ additionalProperties อย่างมีเจตนา — ค่า false เหมาะกับ contract แบบเข้มงวด แต่ถ้าข้อมูลอาจมี field เพิ่มในอนาคต ควรพิจารณาตั้งเป็น true
- เก็บ schema ไว้ใน version control — ปฏิบัติกับไฟล์ schema เหมือนเป็นส่วนหนึ่งของ codebase คือ review ผ่าน pull request และนำไปใช้ใน CI/CD เพื่อ validation อัตโนมัติ
เริ่มสร้าง JSON Schema ของคุณเลย
ถ้าคุณเบื่อการนั่งเขียน JSON Schema ด้วยตัวเอง หรืออยากได้ schema ที่ตรงกับข้อมูลจริงอย่างรวดเร็ว ลองใช้ JSON Schema Generator เพียงวางตัวอย่าง JSON เลือก Draft แล้วกด generate คุณก็จะได้ schema สมบูรณ์พร้อมใช้ภายในไม่กี่วินาที ไม่ต้องสมัครสมาชิก และข้อมูลไม่ออกจาก browser ของคุณ เริ่มสร้าง API contract ของคุณได้เลยวันนี้!
เครื่องมือที่เกี่ยวข้อง
- /th/tools/json-schema-validator — ตรวจสอบ JSON ของคุณกับ JSON Schema ว่าถูกต้องตาม contract ที่กำหนดหรือไม่
- /th/tools/json-to-typescript — แปลง JSON เป็น TypeScript types เพื่อนำไปใช้ในโปรเจกต์ได้ทันที
- /th/tools/json-formatter — จัดรูปแบบและตรวจสอบ syntax ของ JSON ให้อ่านง่ายก่อนนำไปใช้งานต่อ
ขอให้สนุกกับการสร้าง schema!