Chuyển JSON sang dataclass và TypedDict Python

Chuyển JSON thành dataclass hoặc lớp TypedDict của Python có type hint, trường Optional và lớp lồng nhau được định nghĩa theo đúng thứ tự phụ thuộc. Miễn phí.

Các lớp được sắp xếp để phụ thuộc đứng trước. Trường tùy chọn mặc định là None; đầu ra TypedDict dùng NotRequired (Python 3.11+).

Chạy hoàn toàn trong trình duyệt. Dữ liệu của bạn không bao giờ bị tải lên.

Công cụ Liên quan

Xem Tất cả

JSON sang Python là gì?

Tạo các lớp Python có kiểu từ một mẫu JSON: lớp @dataclass hoặc định nghĩa TypedDict. Đối tượng lồng nhau trở thành lớp riêng, được sinh ra trước các lớp sử dụng chúng để module import không lỗi.

Cách sử dụng JSON sang Python

  1. Dán mẫu JSON vào ô JSON đầu vào (hoặc nhấn Tải ví dụ / Mở tệp).
  2. Đặt Tên kiểu gốc (mặc định là Root).
  3. Chọn Kiểu đầu ra: @dataclass hoặc TypedDict.
  4. Sao chép mã Python được tạo ra hoặc nhấn Tải xuống để lưu thành tệp.

Ví dụ

Đầu vào
{"id":1,"name":"A","tags":["x"]}
Đầu ra
from dataclasses import dataclass
from typing import List


@dataclass
class Root:
    id: int
    name: str
    tags: List[str]

Khi nào nên dùng JSON sang Python

Dùng để thêm type hint cho payload JSON trong script, mã FastAPI hoặc kiểm thử. Dataclass không tự chuyển dict lồng nhau – hãy dùng thư viện như dacite hoặc pydantic cho việc đó, hoặc dùng kiểu TypedDict để giữ nguyên dict thông thường.

JSON sang Python hoạt động như thế nào

Mẫu JSON được duyệt đệ quy và mỗi vị trí ghi nhận các kiểu dữ liệu đã gặp. Mảng đối tượng được gộp thành một kiểu: khóa thiếu ở một số phần tử trở thành tùy chọn, khóa có giá trị null ở đâu đó trở thành nullable, số nguyên trộn với số thập phân trở thành kiểu số thực, và mọi trường hợp trộn kiểu khác sẽ dùng kiểu động. Đối tượng lồng nhau trở thành kiểu có tên riêng (tên khóa viết PascalCase, khóa mảng được chuyển về số ít: orders → Order), kèm hậu tố số khi trùng tên. Đầu ra Python dùng int, float, str, bool, List[T], Optional[T] cho null và Any cho giá trị động. Trong dataclass, trường bắt buộc đứng trước còn trường tùy chọn có = None; khóa không phải định danh hợp lệ (hoặc là từ khóa như class) được đổi tên theo snake_case kèm chú thích # JSON key. Đầu ra TypedDict đánh dấu khóa bị thiếu bằng NotRequired và chuyển sang cú pháp hàm TypedDict("Name", {...}) khi có khóa không phải định danh hợp lệ.

Các Trường Hợp Sử Dụng Phổ Biến

  • Chú thích kiểu cho phản hồi JSON API để dùng với mypy hoặc Pyright
  • Tạo dataclass cho tệp cấu hình
  • Mô tả payload webhook bằng TypedDict
  • Tạo model khởi đầu trước khi chuyển sang pydantic

Câu Hỏi Thường Gặp

Cần phiên bản Python nào?

Đầu ra dataclass chạy trên Python 3.7 trở lên. Đầu ra TypedDict dùng NotRequired, có trong module typing từ Python 3.11 (hoặc typing_extensions cho phiên bản cũ hơn).

Vì sao một số trường bị đổi tên?

Các khóa như first-name hoặc class không phải tên thuộc tính hợp lệ, nên trở thành first_name / class_ kèm chú thích cho biết khóa JSON gốc.

Tôi có thể nạp JSON thẳng vào dataclass không?

Root(**data) dùng được với dữ liệu phẳng; đối tượng lồng nhau vẫn là dict trừ khi bạn tự chuyển đổi hoặc dùng thư viện hỗ trợ.

Bước tiếp theo nên làm

Khám phá thêm danh mục