JSON ถึงคลาสข้อมูลใน Python

ให้วางตัวอย่าง JSON เข้าไป เพื่อให้ได้ผลลัพธ์ในรูปแบบ @dataclass (หรือ Pydantic BaseModel) พร้อมคำแนะนำประเภทข้อมูลสำหรับแต่ละฟิลด์ ได้แก่ str, int, float, bool, Optional[...] และ List[...] เมื่อเหมาะสม โดยวัตถุที่ซ้อนกันจะกลายเป็นคลาสข้อมูลแยกต่างหาก ผลลัพธ์จะอยู่ในรูปแบบมาตรฐาน PEP 8 และพร้อมใช้งานสำหรับการวางลงในไฟล์ Python

วิธีแปลง JSON เป็น dataclass

  1. 1

    วางข้อมูลในรูปแบบ JSON

    ตัวอย่างเพียงชุดเดียวก็เพียงพอ ส่วนการใช้หลายตัวอย่างจะช่วยเพิ่มความสามารถในการตรวจจับว่าฟิลด์ใดสามารถมีค่าเป็น null ได้

  2. 2

    เลือกสไตล์

    ไลบรารีมาตรฐาน `@dataclass`, Pydantic `BaseModel` หรือ `TypedDict` สำหรับการตรวจสอบประเภทแบบสถิตเท่านั้น

  3. 3

    เลือกเวอร์ชันของ Python

    3.9+ สำหรับไวยากรณ์ของ `list[str]`, 3.10+ สำหรับประเภทยูนียนของ `|` และ 3.8 สำหรับ `Optional[...]`/`List[...]`

  4. 4

    คัดลอกโค้ด

    คลาสรากหนึ่งพร้อมคลาสย่อยที่อยู่ภายใน ให้วางไว้ในไฟล์ `.py` แล้วนำเข้าข้อมูล

ตัวอย่างผลลัพธ์: @dataclass มาตรฐาน

ข้อมูลที่ป้อนเข้ามา:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

ผลลัพธ์ (Python 3.10 และเวอร์ชันใหม่กว่า):

from dataclasses import dataclass, field
from typing import Optional


@dataclass
class User:
    first_name: str
    age: int
    tags: list[str] = field(default_factory=list)
    email: Optional[str] = None

ใช้ข้อมูลขาเข้าเดียวกันกับ Pydantic

from typing import Optional
from pydantic import BaseModel


class User(BaseModel):
    first_name: str
    age: int
    email: Optional[str] = None
    tags: list[str] = []

การจับคู่รูปแบบ

ค่า JSON ประเภทใน Python
ข้อความ str
จำนวนเต็ม int
หมายเลข (ฐานสิบ) float
บูลีน bool
ไม่มีข้อมูล (แสดงเพียงอย่างเดียว) None
ตัวแปรว่าง + ประเภทข้อมูลอื่น Optional[T]
ชุดข้อมูลวันที่แบบ ISO date (Python 3.7+)
วันและเวลาตามมาตรฐาน ISO datetime
ชุดข้อมูลประเภทเดียว list[T]
ชุดข้อมูลผสม list[Union[T1, T2]]
วัตถุ คลาสแบบซ้อนทับ

Dataclass เทียบกับ Pydantic และ TypedDict

ประเภท เวลาที่ควรใช้
@dataclass โซลูชันจากไลบรารีมาตรฐาน โดยไม่มีการตรวจสอบความถูกต้องขณะรัน
Pydantic การตรวจสอบความถูกต้องและการบังคับรูปแบบข้อมูลในระหว่างการรัน (FastAPI, การตั้งค่า)
TypedDict ตรวจสอบประเภทแบบสถิตเท่านั้น ไม่ใช่คลาสอินสแตนซ์
attrs โครงการรุ่นเก่าที่ได้ปรับใช้มาตรฐานตาม attrs

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

  • การละเว้นการใช้ default_factory สำหรับค่าเริ่มต้นที่สามารถเปลี่ยนแปลงได้ ค่าเริ่มต้นของ list[str] = [] เป็น “กับดัก” สำหรับคลาสข้อมูล (ใช้ร่วมกันระหว่างอินสแตนซ์) ควรใช้ field(default_factory=list) แทน
  • สามารถไม่ใช้ได้โดยไม่มีค่าเริ่มต้น หาก email: Optional[str] ไม่รวม = None ก็ยังคงต้องระบุอาร์กิวเมนต์นี้ โปรดให้สอดคล้องกับรูปแบบข้อมูล JSON ของคุณ
  • Pydantic เวอร์ชัน v1 เทียบกับ v2: ไวยากรณ์และพฤติกรรมการทำงานแตกต่างกัน (คลาส Config เทียบกับ model_config; validator เทียบกับ field_validator) โดยตัวสร้างจะใช้เวอร์ชัน v2 เป็นค่าเริ่มต้น
  • ลำดับของประเภทข้อมูลมีความสำคัญต่อกระบวนการถอดการจัดเรียงข้อมูล (deserialization) โดย Pydantic จะตรวจสอบประเภทตามลำดับที่กำหนดไว้ หากมีความคลุมเครือ ควรเรียงประเภทที่เฉพาะเจาะจงที่สุดก่อน (เช่น int ก่อน str)

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

คลาส Dataclass สำหรับข้อมูลที่มีค่าแบบง่าย โดยไม่มีการตรวจสอบความถูกต้อง; ใช้ Pydantic เมื่อต้องการการตรวจสอบความถูกต้องขณะรันไทม์ การบังคับแปลงชนิดข้อมูล หรือการผสานรวมกับ FastAPI; และใช้ TypedDict เมื่อต้องการเพียงการตรวจสอบชนิดข้อมูลแบบสถิต (เช่น ใน mypy และ pyright) และไม่จำเป็นต้องสร้างอินสแตนซ์ของคลาส

ไม่จำเป็นสำหรับ Python เวอร์ชัน 3.10 ขึ้นไป ซึ่งประเภท union (|) และไวยากรณ์ list[str] เป็นฟังก์ชันในตัวของภาษา อย่างไรก็ตาม มีประโยชน์สำหรับโปรเจกต์ที่ใช้ Python เวอร์ชัน 3.7–3.9 เพื่อนำไวยากรณ์ใหม่มาใช้งานผ่านคำอธิบายสตริงตามมาตรฐาน PEP 563 โดยเครื่องสร้างจะแจ้งเตือนเมื่อมีความจำเป็น

ออบเจกต์แต่ละตัวที่อยู่ภายในกันจะกลายเป็นคลาสของตนเอง โดยคลาสหลักจะอ้างอิงถึงพวกมันด้วยชื่อ เพื่อให้สามารถนำประเภทข้อมูลกลับมาใช้ซ้ำได้ การอ้างอิงแบบวนลูปจะถูกตรวจจับและแสดงเครื่องหมายไว้

ใช่ หากคุณเลือกรูปแบบ Pydantic FastAPI จะใช้โมเดล Pydantic เป็นประเภทของคำขอและผลตอบกลับโดยตรง ส่วนสำหรับการจัดเรียงข้อมูลภายในระบบแล้ว @dataclass มีความเบาบางและมีขนาดเล็กกว่า

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

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

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

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

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

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

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

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

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

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

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

ตัวลดรูปพีชคณิตบูลีน

ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^

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