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

JSON เป็น Pydantic Model

เปลี่ยน JSON ตัวอย่างเป็นคลาส Pydantic v2 model ของ Python พร้อมตัวสลับสำหรับผลลัพธ์ @dataclass หรือ TypedDict และการตั้ง alias ฟิลด์แบบ snake_case

ผลลัพธ์

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

เครื่องมือ JSON เป็น Pydantic Model แปลง JSON ตัวอย่างที่วางเข้ามาให้เป็นคลาส model ของ Python นักพัฒนา Python และ FastAPI ต้องสร้างโครง Pydantic model จากการตอบกลับ API ตัวอย่างอยู่ตลอด และตัวแปลงนี้ทำได้ทันทีในเบราว์เซอร์ มันแยกวิเคราะห์ JSON ของคุณ อนุมานชนิด Python แบบเรียกซ้ำ และสร้างหนึ่งคลาสต่อหนึ่ง object: string กลายเป็น str, สตริงวันที่-เวลาแบบ ISO เป็น datetime, สตริงวันที่อย่างเดียวเป็น date, จำนวนเต็มเป็น int, ตัวเลขอื่น ๆ เป็น float, boolean เป็น bool, อาร์เรย์เป็น List[T], และ object ซ้อนกลายเป็นคลาส model ของตัวเองที่ตั้งชื่อแบบ PascalCase

การแยกวิเคราะห์และการสร้างทั้งหมดเกิดขึ้นภายในเครื่องด้วย JSON.parse และ JavaScript ธรรมดา ดังนั้นสิ่งที่คุณวางจะไม่ออกจากเครื่องของคุณ คลาสลูกถูกสร้างก่อนคลาสที่อ้างอิงถึง (ลำดับ topological) และส่วนหัวจะ import เฉพาะสิ่งที่ใช้จริง — BaseModel และ Field จาก pydantic, Optional / List / Union / Any จาก typing, และ datetime / date เมื่อเกี่ยวข้อง from __future__ import annotations จะถูกใส่ไว้เสมอเพื่อให้การอ้างอิงล่วงหน้าทำงานได้ไม่ว่าลำดับจะเป็นอย่างไร

คีย์ที่ขาดหายจาก sibling object บางตัว หรือพบเป็น null จะกลายเป็น Optional[T] = None ตัวสลับโหมดผลลัพธ์เลือกระหว่าง Pydantic v2 BaseModel (ค่าเริ่มต้น), stdlib @dataclass, และ typing.TypedDict เปิดฟิลด์ snake_case เพื่อเปลี่ยนชื่อคีย์แบบ camelCase หรือคีย์ที่ไม่ถูกต้อง และเพิ่ม Field(alias="originalKey") อัตโนมัติเพื่อให้ model ยังแยกวิเคราะห์ JSON เดิมได้ คัดลอกโค้ดหรือดาวน์โหลดเป็นไฟล์ .py

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

ชนิด Python ใดที่ถูกอนุมาน?
string เป็น str, ISO date-time เป็น datetime, วันที่อย่างเดียวเป็น date, จำนวนเต็มเป็น int, ตัวเลขที่ไม่ใช่จำนวนเต็มเป็น float, boolean เป็น bool, อาร์เรย์เป็น List[T] โดย T รวมมาจากสมาชิก และ object เป็นคลาส BaseModel ซ้อน ค่าที่เป็น null หรือขาดหายกลายเป็น Optional[T] = None
ฉันขอเป็น dataclass หรือ TypedDict แทนได้ไหม?
ได้ ตัวสลับโหมดผลลัพธ์สร้าง Pydantic v2 BaseModel (ค่าเริ่มต้น), stdlib @dataclass พร้อม import dataclasses, หรือคลาส typing.TypedDict การอนุมานชนิดเหมือนกัน เปลี่ยนแค่โครงคลาสและ import
คีย์ที่ไม่ใช่ identifier หรือ camelCase ถูกจัดการอย่างไร?
เมื่อเปิดฟิลด์ snake_case คีย์อย่าง userName จะกลายเป็น user_name พร้อม Field(alias="userName") เพื่อให้ยังแปลงกลับไปกลับมาได้ คีย์ที่เป็นคำสงวนของ Python หรือ identifier ที่ไม่ถูกต้องจะถูกตั้ง alias เสมอเพื่อให้โค้ดที่สร้างถูกต้อง
คลาสถูกจัดลำดับอย่างถูกต้องไหม?
ใช่ คลาสลูกที่ซ้อนถูกประกาศก่อนคลาสแม่ที่ใช้มัน และมี from __future__ import annotations รวมอยู่ ดังนั้น model จึงคอมไพล์ได้โดยไม่มีข้อผิดพลาดการอ้างอิงล่วงหน้า

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