เครื่องมือสร้าง JSON Schema

วางตัวอย่าง JSON หนึ่งชุดหรือหลายชุด แล้วเครื่องมือจะอนุมาน JSON Schema ที่คุณนำไปใช้ตรวจสอบความถูกต้องของ payload ใหม่ได้ โดยจะตรวจจับชนิดข้อมูล ทำเครื่องหมายฟิลด์ว่าจำเป็นเมื่อปรากฏในทุกตัวอย่าง อนุมาน enum เมื่อค่ามาจากชุดปิดขนาดเล็ก และสร้างผลลัพธ์ที่สอดคล้องกับ JSON Schema draft 2020-12

วิธีสร้าง JSON Schema

  1. 1

    วางเอกสารตัวอย่าง

    payload จริงหนึ่งชุดหรือหลายชุด ยิ่งมีความหลากหลายมากเท่าใด สคีมาที่อนุมานได้ก็ยิ่งแม่นยำมากขึ้นเท่านั้น

  2. 2

    เลือกดราฟต์

    draft 2020-12 (ปัจจุบัน), draft 07 (รองรับอย่างกว้างขวาง) หรือ draft 04 (สำหรับ OpenAPI รุ่นเก่า)

  3. 3

    ปรับแต่งการอนุมาน

    สลับการอนุมาน enum, กลยุทธ์ฟิลด์ที่จำเป็น (อินเตอร์เซกชันหรือยูเนียน) และการกำหนดว่าจะทำเครื่องหมายทุกฟิลด์เป็น `required` หรือไม่ เมื่อมีตัวอย่างเพียงชุดเดียว

  4. 4

    สร้าง

    สคีมาจะถูกสร้างพร้อมกับ `$schema`, `title`, `type`, `properties` และ `$ref` ที่ซ้อนกันสำหรับอ็อบเจกต์ย่อยที่ปรากฏซ้ำ

สิ่งที่การอนุมานทำได้ดี

  • ชนิดข้อมูล: string, number, integer, boolean, null, array, object
  • ความเป็น null ได้: ฟิลด์ที่เป็น null ในตัวอย่างหนึ่งและเป็นสตริงในอีกตัวอย่างหนึ่ง จะกลายเป็น ["string", "null"]
  • สมาชิกของอาร์เรย์: อาร์เรย์ที่มีชนิดเดียวกันจะสร้างสคีมา items เพียงชุดเดียว ส่วนอาร์เรย์ที่มีหลายชนิดจะสร้าง prefixItems
  • enum: หากค่าที่พบทั้งหมดมาจากชุดขนาดเล็ก (ปรับค่าได้ ค่าเริ่มต้นคือ 10 ค่าที่แตกต่างกัน) จะสร้าง enum ออกมา
  • จำเป็น: เมื่อมีหลายตัวอย่าง อินเตอร์เซกชันของคีย์จะกลายเป็น required; เมื่อมีตัวอย่างเดียว คีย์ทั้งหมดจะจำเป็น เว้นแต่คุณจะเลือกไม่ใช้
  • รูปแบบ: สตริงที่ตรงกับวันที่ตามมาตรฐาน ISO-8601 อีเมล หรือ URI จะได้รับ format ที่อนุมานได้

สิ่งที่การอนุมานไม่อาจรู้ได้

  • เจตนากับตัวอย่าง: ตัวอย่าง age: 25 อนุมานได้ว่าเป็น type: integer แต่ไม่อาจรู้ได้ว่าคุณยอมรับ null ด้วยหรือไม่ ควรส่งตัวอย่างหลายชุดที่ครอบคลุมกรณีขอบเขต
  • ข้อจำกัด: minLength, maximum, pattern, คุณต้องเพิ่มด้วยตนเอง การอนุมานจะไม่เดาขอบเขตจากตัวอย่าง
  • ตรรกะทางธุรกิจ: เงื่อนไข “ต้องกำหนดค่าเพียงหนึ่งในสามฟิลด์นี้เท่านั้น” ต้องใช้ oneOf, ไม่สามารถอนุมานได้
  • การอ้างอิง: เครื่องมือจะสร้างสคีมาแบบแบน หากต้องการแยกรูปแบบที่ซ้ำกันออกเป็น $defs ให้ทำหลังจากการสร้างเสร็จสิ้น

ตัวอย่างผลลัพธ์

จากตัวอย่างชุดเดียว:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

สคีมาที่อนุมานได้ (draft 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

ข้อผิดพลาดที่พบบ่อย

  • อนุมานจากตัวอย่างชุดเดียว สคีมาจะโอเวอร์ฟิต, ทุกฟิลด์กลายเป็นจำเป็น และไม่ยอมรับ null เลย ควรป้อนตัวอย่างที่หลากหลายอย่างน้อย 5–10 ชุดเสมอ
  • ใช้ integer ทั้งที่ต้องการ number หากตัวอย่างใดมีทศนิยม ชนิดที่อนุมานได้จะเป็น number; หากทั้งหมดเป็นจำนวนเต็ม จะเป็น integer สำหรับฟิลด์ที่เป็นได้ทั้งสองแบบ ควรใส่ตัวอย่างที่มีทศนิยมด้วย
  • ลืมฟิลด์ที่เป็นตัวเลือก ฟิลด์ที่ปรากฏใน 4 จาก 5 ตัวอย่างแต่ขาดไปใน 1 ตัวอย่างจะกลายเป็นตัวเลือก, ซึ่งเป็นไปตามที่ตั้งใจ หากทั้ง 5 ตัวอย่างบังเอิญมีฟิลด์นั้น สคีมาจะทำเครื่องหมายว่าจำเป็น แม้ว่าในความเป็นจริงมันจะเป็นตัวเลือกใน API ของคุณก็ตาม

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

ยิ่งมากยิ่งดี แต่โดยทั่วไปตัวอย่างที่หลากหลาย 5–10 ชุดก็เพียงพอที่จะสร้างสคีมาที่สมเหตุสมผลได้ หากมีตัวอย่างเพียงชุดเดียว ทุกฟิลด์จะกลายเป็นจำเป็นและไม่สามารถอนุมานความเป็น null ได้ ดังนั้นควรให้ตัวอย่างหลายรูปแบบเสมอหากเป็นไปได้

ค่าเริ่มต้นคือ draft 2020-12 ส่วน draft 07 และ draft 04 มีให้ใช้เพื่อรองรับความเข้ากันได้กับ OpenAPI 3.0 (ซึ่งใช้ส่วนย่อยของ draft 05/07)

ไม่ การอนุมานข้อจำกัดจากตัวอย่างจะทำให้สคีมาโอเวอร์ฟิต ให้เพิ่ม minLength, maximum, pattern และอื่น ๆ ด้วยตนเองหลังจากการสร้าง โดยอิงตามกฎทางธุรกิจของคุณ

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

เครื่องมือที่เกี่ยวข้อง

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

ตัวตรวจสอบอีเมล

ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ

เครื่องสร้างตัวอักษรสุ่ม

สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

เครื่องมือสร้าง EditorConfig

สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข

เครื่องมือนี้มีให้บริการในภาษาอื่น