UTILS.
ทำงานในเบราว์เซอร์ 100%
🛡️

JSON เป็น Zod Schema

วาง JSON ตัวอย่างแล้วสร้าง Zod schema พร้อมชนิด TypeScript ที่อนุมานได้ เพื่อให้รูปแบบเดียวตรวจสอบทั้งตอนรันไทม์และชนิดตอนคอมไพล์

ผลลัพธ์

เกี่ยวกับเครื่องมือนี้

เครื่องมือ JSON เป็น Zod Schema เปลี่ยน JSON ตัวอย่างที่วางเข้ามาให้เป็น Zod schema ที่พร้อมใช้งานและชนิด TypeScript ที่ตรงกัน Zod เป็นไลบรารีตรวจสอบข้อมูลของ TypeScript ที่ได้รับความนิยมสูงสุด และการเขียนโครงสร้าง z.object ด้วยมือสำหรับ payload ของ API จริงนั้นช้าและเกิดข้อผิดพลาดง่าย ตัวแปลงนี้จะแยกวิเคราะห์ JSON ของคุณด้วย JSON.parse วนอ่านค่าแบบเรียกซ้ำ และสร้าง Zod ที่เป็นสำนวนถูกต้อง: string กลายเป็น z.string(), จำนวนเต็มเป็น z.number().int(), ตัวเลขอื่น ๆ เป็น z.number(), boolean เป็น z.boolean(), null เป็น z.null() และ object ซ้อนกลายเป็น schema z.object({...}) ที่มีชื่อของตัวเอง

ทุกอย่างทำงานภายในเบราว์เซอร์ของคุณ — JSON ถูกแยกวิเคราะห์ในหน้าเว็บและไม่เคยถูกอัปโหลด ดังนั้น payload ที่ละเอียดอ่อนจะอยู่บนอุปกรณ์ของคุณ อาร์เรย์จะอนุมานชนิดของสมาชิกด้วยการรวมทุกสมาชิกแบบลึก ดังนั้นอาร์เรย์ของ object ที่มีคีย์ต่างกันเล็กน้อยจะให้ schema เดียวที่คีย์ที่ขาดหายไปจากบางสมาชิกถูกทำเครื่องหมาย .optional() สตริงวันที่-เวลาแบบ ISO-8601 จะถูกจดจำและสร้างเป็น z.string().datetime() คีย์ object ที่ไม่ใช่ identifier ที่ถูกต้องจะถูกใส่เครื่องหมายคำพูดอย่างปลอดภัย

ผลลัพธ์เป็นโมดูลที่สมบูรณ์: const ที่ export สำหรับแต่ละ object schema (โดยกำหนดตัวลูกก่อนตัวแม่ที่อ้างอิงถึง) ตามด้วย export type Root = z.infer<typeof Root> คุณจึงได้ชนิดตอนคอมไพล์มาฟรี ใช้ช่องชื่อ root เพื่อเปลี่ยนชื่อ schema ระดับบนสุด และตัวสลับคีย์ที่ขาดหายเพื่อจัดการคีย์ที่ไม่มีเป็น .optional() (ค่าเริ่มต้น) หรือ .nullable() คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์ .ts

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

ชนิด JSON ถูกจับคู่กับ Zod อย่างไร?
string เป็น z.string(), สตริงวันที่-เวลาแบบ ISO เป็น z.string().datetime(), จำนวนเต็มเป็น z.number().int(), ตัวเลขอื่น ๆ เป็น z.number(), boolean เป็น z.boolean(), null เป็น z.null(), อาร์เรย์เป็น z.array(...), และ object เป็น z.object({...}) ที่มีชื่อ อาร์เรย์ว่างกลายเป็น z.array(z.unknown())
ฟิลด์ที่เป็น optional หรือ nullable ถูกจัดการอย่างไร?
เมื่อสมาชิกของอาร์เรย์หรือ sibling ที่รวมกันขาดคีย์ใด คีย์นั้นจะถูกทำเครื่องหมาย .optional() ค่าที่พบเป็น null จะกลายเป็น z.null() หรือเพิ่ม .nullable() ตัวสลับคีย์ที่ขาดหายให้คุณสร้าง .optional() (ค่าเริ่มต้น) หรือ .nullable() สำหรับคีย์ที่ไม่มีในบางตัวอย่าง
มันให้ชนิด TypeScript ด้วยไหม?
ใช่ หลังจาก schema มันจะสร้าง export type Root = z.infer<typeof Root> ดังนั้นชนิดสแตติกที่อนุมานได้จึงมาจากตัว schema เอง — เป็นแหล่งความจริงเดียวสำหรับทั้งการตรวจสอบตอนรันไทม์และชนิดตอนคอมไพล์
JSON ของฉันถูกอัปโหลดที่ไหนไหม?
ไม่ การแยกวิเคราะห์และการสร้างโค้ดเกิดขึ้นทั้งหมดในเบราว์เซอร์ของคุณด้วย JSON.parse และ JavaScript ธรรมดา ไม่มีอะไรถูกส่งไปยังเซิร์ฟเวอร์ คุณจึงสามารถวางการตอบกลับ API แบบส่วนตัวได้อย่างปลอดภัย

เครื่องมือเพิ่มเติม