Chuyển JSON sang Go struct

Chuyển JSON thành Go struct với tên trường export, thẻ json, kiểu con trỏ cho null và omitempty tùy chọn. Xử lý đối tượng lồng nhau và mảng. Miễn phí.

Đối tượng lồng nhau thành struct riêng; giá trị có thể null dùng con trỏ; số nguyên thành int64, số thập phân thành float64, giá trị hỗn hợp hoặc chỉ null thành any.

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 Go struct là gì?

Tạo định nghĩa struct Go chuẩn phong cách từ một mẫu JSON. Tên trường được export dạng PascalCase với các từ viết tắt theo quy ước Go (ID, URL, API…), mỗi trường có thẻ json:"…" chứa khóa gốc, và đối tượng lồng nhau trở thành các struct có tên riêng.

Cách sử dụng JSON sang Go struct

  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. Giữ hoặc bỏ chọn Thêm omitempty cho trường tùy chọn và có thể null.
  4. Sao chép mã Go đượ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
type Root struct {
	ID   int64    `json:"id"`
	Name string   `json:"name"`
	Tags []string `json:"tags"`
}

Khi nào nên dùng JSON sang Go struct

Dùng để unmarshal phản hồi API bằng encoding/json. Công cụ không tạo kiểu riêng cho giá trị thời gian hoặc enum; hãy tự đổi string thành time.Time ở những chỗ phù hợp.

JSON sang Go struct 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 Go dùng int64 cho số nguyên, float64 cho số thập phân, string, bool, slice cho mảng, con trỏ (*T) cho giá trị nullable và any cho giá trị động hoặc chỉ có null. Các cột được căn thẳng hàng như kết quả của gofmt.

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

  • Mô hình hóa phản hồi REST cho json.Unmarshal
  • Tạo struct cấu hình từ tệp JSON
  • Viết DTO nhanh hơn cho microservice Go
  • So sánh cách đặt tên trường giữa JSON và mã Go

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

Vì sao dùng int64 thay vì int?

int64 có kích thước cố định trên mọi nền tảng, tránh lỗi tràn bất ngờ với ID lớn. Bạn có thể đổi thành int nếu muốn.

Khi nào dùng con trỏ?

Khi mẫu có giá trị null cho một khóa, trường đó trở thành *T để phân biệt giá trị bị thiếu với giá trị zero.

omitempty có tác dụng gì?

encoding/json bỏ qua trường khi marshal nếu trường có giá trị zero. Tùy chọn này chỉ thêm omitempty vào các trường tùy chọn hoặc nullable trong mẫu.

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

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