ToolDeck

JSON เป็น Python

สร้าง Python dataclasses จาก JSON

ลองตัวอย่าง
ชื่อ root class:

อินพุต JSON

เอาต์พุต Python

ประมวลผลในเครื่อง · ปลอดภัยในการวางข้อมูลลับ
Python dataclasses จะแสดงที่นี่…

การแปลง JSON เป็น Python Dataclass คืออะไร?

การแปลง JSON เป็น Python dataclass รับ JSON object ดิบแล้วสร้างชุดนิยาม Python dataclass พร้อม type annotations ที่ถูกต้อง โมดูล dataclasses ของ Python ที่เปิดตัวใน PEP 557 (Python 3.7) สร้าง method __init__, __repr__ และ __eq__ จาก class fields ที่มี annotations เมื่อทำงานกับ JSON APIs, configuration files หรือ message queues dataclasses ให้โครงสร้างข้อมูลแบบมีประเภทที่ editor และ type checkers อย่าง mypy สามารถตรวจสอบได้ในช่วงพัฒนา

json.loads() ของ Python คืนค่า dicts และ lists ธรรมดา ใช้งานได้แต่ไม่มีข้อมูลประเภท: key ที่พิมพ์ผิดจะคืนค่า None แทนที่จะเกิด error และ editor ไม่สามารถ autocomplete ชื่อ field ได้ Dataclasses แก้ปัญหานี้โดยแมป JSON key แต่ละตัวไปยัง field ที่มีชื่อและประเภทชัดเจน JSON objects ที่ซ้อนกันกลายเป็นนิยาม dataclass แยกกัน arrays กลายเป็น annotations ประเภท List[T] และค่า null กลายเป็น Optional[T] ที่มีค่าเริ่มต้นเป็น None

การเขียนนิยามเหล่านี้ด้วยมือเป็นงานที่ซ้ำซาก คุณต้องอ่าน JSON หาประเภทของแต่ละ field จากค่าของมัน แปลง keys จาก camelCase หรือ snake_case ให้ตรงกับแนวทาง Python และจัดการ edge cases อย่าง nullable fields และ arrays ที่มีประเภทผสม เครื่องมือแปลงทำทั้งหมดนี้ในเวลาไม่กี่ milliseconds คุณวาง JSON รับโค้ด dataclass ที่ถูกต้อง แล้วดำเนินการต่อได้เลย

ทำไมต้องใช้เครื่องมือแปลง JSON เป็น Python?

การแปลงโครงสร้าง JSON เป็น Python class definitions ด้วยมือหมายถึงการเดาประเภทจาก sample data เรียงลำดับ fields ให้ fields ที่จำเป็นมาก่อน optional fields และอัปเดตทุกอย่างเมื่อ API เปลี่ยน เครื่องมือแปลงกำจัดความยุ่งยากเหล่านั้น

สร้าง dataclass ทันที
วาง JSON และรับนิยาม Python dataclass ที่มีประเภทถูกต้องภายในไม่ถึงวินาที รองรับ nested objects, lists และ optional fields โดยอัตโนมัติ
🔒
ประมวลผลแบบปลอดภัยด้านความเป็นส่วนตัว
การแปลงทำงานทั้งหมดในเบราว์เซอร์โดยใช้ JavaScript JSON ของคุณไม่ออกจากเครื่อง API keys, tokens และข้อมูลผู้ใช้ยังคงเป็นส่วนตัว
📝
Type annotations ที่ถูกต้อง
ทุก field ที่สร้างขึ้นมี Python type annotation ที่อนุมานจากค่า JSON ได้แก่ str, int, float, bool, List[T] หรือ Optional[T] สำหรับค่า null
📦
ไม่ต้องติดตั้งหรือสมัครสมาชิก
เปิดหน้าและวาง JSON ไม่ต้องมี Python environment ไม่ต้องติดตั้ง pip packages ไม่ต้องสร้างบัญชี

กรณีใช้งาน JSON เป็น Python

การพัฒนา REST API Client
สร้าง dataclasses จาก API response samples วาง JSON ที่คืนมาจาก REST endpoint ของ third-party แล้วรับ Python classes ที่ type-safe พร้อมใช้งานกับ requests หรือ httpx
FastAPI Request/Response Models
เริ่มจากรูปร่าง JSON payload และสร้างนิยาม dataclass แปลงเป็น Pydantic models เพื่อรับการตรวจสอบอัตโนมัติใน FastAPI route handlers
Data Pipeline Schemas
กำหนดโครงสร้าง record ที่มีประเภทสำหรับ ETL pipelines วาง JSON message ตัวอย่างจาก Kafka, RabbitMQ หรือ SQS แล้วสร้าง dataclasses ที่บันทึก shape ที่คาดหวัง
การแยกวิเคราะห์ Configuration Files
แปลง JSON config files เป็น Python classes ที่มีประเภท โหลด config ด้วย json.load() แล้วสร้าง dataclass instance เพื่อรับ editor autocomplete และการตรวจสอบประเภท
การสร้าง Test Fixtures
สร้าง fixtures ที่มีประเภทจาก JSON data ตัวอย่าง วิศวกร QA สามารถวาง API response snapshots และสร้างนิยาม dataclass เพื่อใช้ใน pytest test suites
การเรียนรู้ Python Type Annotations
นักศึกษาสามารถวาง JSON structure ใดก็ได้และดูว่า Python แสดงด้วย type hints อย่างไร โค้ดที่สร้างขึ้นแสดง List, Optional, nested classes และค่าเริ่มต้นในบริบทจริง

ตารางการแมปประเภท JSON เป็น Python

ค่า JSON ทุกค่าแมปกับ Python type annotation เฉพาะ ตารางด้านล่างแสดงวิธีที่เครื่องมือแปล JSON type แต่ละอย่าง ทั้งไวยากรณ์โมดูล typing (Python 3.7+) และไวยากรณ์ built-in ที่ใช้ได้ตั้งแต่ Python 3.10 เป็นต้นไป

ประเภท JSONตัวอย่างPython (typing)Python 3.10+
string"hello"strstr
number (integer)42intint
number (float)3.14floatfloat
booleantrueboolbool
nullnullOptional[str]str | None
object{"k": "v"}@dataclass classnested model
array of strings["a", "b"]List[str]list[str]
array of objects[{"id": 1}]List[Item]list[Item]
mixed array[1, "a"]List[Any]list[Any]

อ้างอิง Dataclass Decorator

decorator @dataclass รับพารามิเตอร์หลายตัวที่เปลี่ยนพฤติกรรมของ class ที่สร้างขึ้น เอกสารอ้างอิงนี้ครอบคลุมตัวเลือกที่เกี่ยวข้องมากที่สุดเมื่อทำงานกับข้อมูลที่มาจาก JSON

Decorator / Fieldพฤติกรรมใช้เมื่อ
@dataclassGenerates __init__, __repr__, __eq__ from field annotationsStandard dataclasses
@dataclass(frozen=True)Makes instances immutable (hashable, no attribute reassignment)Config objects, dict keys
@dataclass(slots=True)Uses __slots__ for lower memory and faster attribute accessPython 3.10+, large datasets
@dataclass(kw_only=True)All fields require keyword arguments in __init__Python 3.10+, many fields
field(default_factory=list)Sets a mutable default without sharing state between instancesList/dict/set defaults

dataclass กับ Pydantic กับ TypedDict

Python มีสามวิธีที่นิยมในการกำหนดโครงสร้างที่มีประเภทจาก JSON แต่ละวิธีเหมาะกับกรณีใช้งานที่แตกต่างกัน Dataclasses เป็นตัวเลือก standard library ที่ไม่มี dependencies Pydantic เพิ่มการตรวจสอบที่ runtime TypedDict ใส่ annotations ใน plain dicts โดยไม่สร้าง class ใหม่

@dataclass
Standard library (Python 3.7+) สร้าง __init__, __repr__ และ __eq__ ไม่มีการตรวจสอบที่ runtime ใช้งานได้กับ mypy และ dataclasses-json สำหรับ serialization เหมาะสำหรับโครงสร้างข้อมูลภายในที่คุณควบคุม input
BaseModel (Pydantic)
Third-party library ตรวจสอบประเภทและข้อจำกัดที่ runtime แยกวิเคราะห์ JSON โดยตรงผ่าน model_validate_json() เป็นตัวเลือกมาตรฐานสำหรับ FastAPI การจัดการ settings และโค้ดที่รับ input จากแหล่งภายนอก
TypedDict
Standard library (Python 3.8+) เพิ่ม type hints ให้ dicts ธรรมดา ไม่สร้าง __init__ หรือ methods การเข้าถึงค่ายังคงเป็น plain dict ใช้เมื่อต้องการการตรวจสอบประเภทแต่ต้องการ dict interface เช่นใน legacy codebases

ตัวอย่างโค้ด

ตัวอย่างเหล่านี้แสดงวิธีใช้ dataclasses ที่สร้างขึ้นใน Python วิธีสร้างจาก JavaScript แบบ programmatic และวิธีใช้ทางเลือกอย่าง Pydantic และ CLI tools

Python (dataclasses)
from dataclasses import dataclass
from typing import List, Optional
import json

@dataclass
class Address:
    street: str
    city: str
    zip: str

@dataclass
class User:
    id: int
    name: str
    email: str
    active: bool
    score: float
    address: Address
    tags: List[str]
    metadata: Optional[str] = None

raw = '{"id":1,"name":"Alice","email":"alice@example.com","active":true,"score":98.5,"address":{"street":"123 Main St","city":"Springfield","zip":"12345"},"tags":["admin","user"],"metadata":null}'
data = json.loads(raw)

# Reconstruct nested objects manually
addr = Address(**data["address"])
user = User(**{**data, "address": addr})
print(user.name)     # -> Alice
print(user.address)  # -> Address(street='123 Main St', city='Springfield', zip='12345')
JavaScript (generate Python from JSON)
// Minimal JSON-to-Python-dataclass generator in JS
function jsonToPython(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Optional[str]";
    if (typeof val === "string") return "str";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "float";
    if (typeof val === "boolean") return "bool";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      return first ? `List[${infer(first, fieldName + "Item")}]` : "List[Any]";
    }
    if (typeof val === "object") {
      const clsName = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, clsName);
      return clsName;
    }
    return "Any";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => `    ${k}: ${infer(v, k)}`);
    classes.push(`@dataclass\nclass ${cls}:\n${fields.join("\n")}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

const data = { id: 1, name: "Alice", scores: [98, 85] };
console.log(jsonToPython(data, "User"));
// @dataclass
// class User:
//     id: int
//     name: str
//     scores: List[int]
Python (Pydantic BaseModel alternative)
from pydantic import BaseModel
from typing import List, Optional

class Address(BaseModel):
    street: str
    city: str
    zip: str

class User(BaseModel):
    id: int
    name: str
    email: str
    active: bool
    score: float
    address: Address
    tags: List[str]
    metadata: Optional[str] = None

# Pydantic parses and validates JSON in one step
raw = '{"id":1,"name":"Alice","email":"alice@example.com","active":true,"score":98.5,"address":{"street":"123 Main St","city":"Springfield","zip":"12345"},"tags":["admin","user"],"metadata":null}'
user = User.model_validate_json(raw)
print(user.name)              # -> Alice
print(user.model_dump_json()) # -> re-serializes to JSON
CLI (datamodel-code-generator)
# Install the generator
pip install datamodel-code-generator

# Generate dataclasses from a JSON file
datamodel-codegen --input data.json --output models.py --output-model-type dataclasses.dataclass

# Generate Pydantic models instead
datamodel-codegen --input data.json --output models.py

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  datamodel-codegen --output-model-type dataclasses.dataclass
# Output:
# @dataclass
# class Model:
#     id: int
#     name: str
#     tags: List[str]

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

Python dataclass ต่างจาก regular class อย่างไร?
dataclass ใช้ decorator @dataclass เพื่อสร้าง method __init__, __repr__ และ __eq__ โดยอัตโนมัติจาก field annotations ส่วน regular class ต้องเขียน method เหล่านี้เอง Dataclasses ลด boilerplate เมื่อ class ใช้เก็บข้อมูลเป็นหลัก ซึ่งเป็นกรณีปกติสำหรับโครงสร้างที่มาจาก JSON
สามารถใช้ dataclasses กับ JSON serialization โดยตรงได้ไหม?
โมดูล json ใน standard library ไม่สามารถ serialize dataclass instances ได้โดยตรง ใช้ dataclasses.asdict() เพื่อแปลง dataclass เป็น dict แล้วส่งต่อให้ json.dumps() สำหรับการควบคุมที่มากขึ้น library dataclasses-json เพิ่ม method .to_json() และ .from_json() และ Pydantic models จัดการ serialization ได้เองโดยตรง
เครื่องมือจัดการ JSON objects ที่ซ้อนกันอย่างไร?
object ที่ซ้อนกันแต่ละชิ้นกลายเป็นนิยาม @dataclass แยกกัน หาก JSON field ชื่อ "address" มี object ที่มี "street" และ "city" เครื่องมือจะสร้าง dataclass ชื่อ Address และใส่ annotation ให้ parent field เป็น address: Address โครงสร้างที่ซ้อนกันลึกสร้างนิยาม dataclass หลายชุดตามลำดับ dependency
เกิดอะไรขึ้นเมื่อ JSON field เป็น null?
Fields ที่เป็น null จะได้รับ annotation เป็น Optional[str] (หรือประเภทที่เหมาะสมหากอนุมานได้จากบริบท) พร้อมค่าเริ่มต้น None fields ที่มีค่าเริ่มต้นต้องมาหลัง required fields ใน dataclass ดังนั้นเครื่องมือจะวาง optional fields ไว้ท้าย class definition
dataclasses กับ Pydantic models ต่างกันอย่างไรสำหรับ JSON?
Dataclasses เป็นส่วนหนึ่งของ standard library และไม่ตรวจสอบข้อมูลที่ runtime Pydantic models ตรวจสอบประเภท บังคับข้อจำกัด และแยกวิเคราะห์ JSON strings โดยตรงได้ หากคุณรับ JSON จากแหล่งภายนอกและต้องการปฏิเสธข้อมูลที่ผิดรูปแบบ Pydantic เหมาะกว่า สำหรับการส่งข้อมูลภายในที่คุณเชื่อถือ input dataclasses เบากว่าและไม่มี dependencies ภายนอก
จัดการ camelCase JSON keys ใน Python dataclasses อย่างไร?
แนวทาง Python ใช้ snake_case สำหรับชื่อตัวแปร เครื่องมือแปล camelCase keys อย่าง "firstName" เป็น snake_case fields อย่าง first_name หากต้องการ deserialize กลับจาก JSON ใช้ library dataclasses-json ที่มี config แมประหว่างทั้งสองรูปแบบการตั้งชื่อ หรือเขียน method __post_init__ เอง
เครื่องมือรองรับไวยากรณ์ Python 3.10+ อย่าง list[str] แทน List[str] ไหม?
เครื่องมือสร้าง imports จากโมดูล typing (List, Optional) เพื่อความเข้ากันได้สูงสุดกับ Python 3.7 ถึง 3.12 หากโปรเจกต์ของคุณใช้ Python 3.10 ขึ้นไป สามารถแทนที่ List[str] ด้วย list[str] และ Optional[str] ด้วย str | None ได้อย่างปลอดภัย ตารางการแมปประเภทด้านบนแสดงทั้งสองรูปแบบ