JSON ถึงคลาสข้อมูลใน Python
ให้วางตัวอย่าง JSON เข้าไป เพื่อให้ได้ผลลัพธ์ในรูปแบบ @dataclass (หรือ Pydantic BaseModel) พร้อมคำแนะนำประเภทข้อมูลสำหรับแต่ละฟิลด์ ได้แก่ str, int, float, bool, Optional[...] และ List[...] เมื่อเหมาะสม โดยวัตถุที่ซ้อนกันจะกลายเป็นคลาสข้อมูลแยกต่างหาก ผลลัพธ์จะอยู่ในรูปแบบมาตรฐาน PEP 8 และพร้อมใช้งานสำหรับการวางลงในไฟล์ Python
วิธีแปลง JSON เป็น dataclass
-
1
วางข้อมูลในรูปแบบ JSON
ตัวอย่างเพียงชุดเดียวก็เพียงพอ ส่วนการใช้หลายตัวอย่างจะช่วยเพิ่มความสามารถในการตรวจจับว่าฟิลด์ใดสามารถมีค่าเป็น null ได้
-
2
เลือกสไตล์
ไลบรารีมาตรฐาน `@dataclass`, Pydantic `BaseModel` หรือ `TypedDict` สำหรับการตรวจสอบประเภทแบบสถิตเท่านั้น
-
3
เลือกเวอร์ชันของ Python
3.9+ สำหรับไวยากรณ์ของ `list[str]`, 3.10+ สำหรับประเภทยูนียนของ `|` และ 3.8 สำหรับ `Optional[...]`/`List[...]`
-
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 และโปรแกรมแก้ไข
ตัวลดรูปพีชคณิตบูลีน
ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^
เครื่องมือนี้มีให้บริการในภาษาอื่น
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON till Python-dataklass [SV]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON do klasy danych w Pythonie [PL]
- JSON zu Python Dataclass [DE]
- JSON vers Dataclass Python [FR]
- JSON ke Dataclass Python [ID]
- JSON naar Python-dataclass [NL]
- JSONからPythonデータクラスへの変換 [JA]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON para Dataclass em Python [PT]
- JSON a Dataclass de Python [ES]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]
- 从 JSON 到 Python 数据类 [ZH]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]