Công cụ chuyển đổi JSON sang cấu trúc Go
Tạo định nghĩa struct Go từ JSON bằng một bản chuyển thể của json-to-go, rồi định dạng bằng gofmt. Các khóa trở thành trường CamelCase được xuất với thẻ json:"..."; đối tượng lồng nhau trở thành struct ẩn danh nội tuyến và null trở thành any.
Viết struct để dùng json.Unmarshal với phản hồi từ REST API của bên thứ ba.
Khi nào nên sử dụng
- Viết struct để dùng json.Unmarshal với phản hồi từ REST API của bên thứ ba.
- Tạo nhanh các kiểu yêu cầu và phản hồi cho trình xử lý HTTP của Go từ dữ liệu mẫu.
Cách sử dụng
- Dán đối tượng hoặc mảng JSON vào trình soạn thảo bên trái.
- Xem struct được tạo; kiểu gốc luôn có tên AutoGenerated.
- Sao chép vào package của bạn, đổi tên kiểu và tách các struct nội tuyến thành kiểu có tên nếu cần tái sử dụng.
JSON
{
"id": 42,
"user_name": "ada",
"score": 9.5,
"active": true,
"deleted_at": null,
"tags": ["go", "json"],
"address": { "city": "Tokyo", "zip": "100-0001" }
}Struct Go
type AutoGenerated struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Score float64 `json:"score"`
Active bool `json:"active"`
DeletedAt any `json:"deleted_at"`
Tags []string `json:"tags"`
Address struct {
City string `json:"city"`
Zip string `json:"zip"`
} `json:"address"`
}Chi tiết và giới hạn
Quá trình tạo mã chạy trong trình duyệt. Không có cài đặt cho tên kiểu, struct nội tuyến hay có tên, hoặc thẻ.
Các từ viết tắt được viết hoa (id trở thành ID) và snake_case trở thành CamelCase, còn khóa gốc được giữ trong thẻ json.
Số nguyên trở thành int (int64 với số lớn), số thập phân trở thành float64. null, mảng rỗng và mảng có nhiều kiểu phần tử trở thành any hoặc []any.
Khi các đối tượng trong một mảng khác nhau, các khóa bị thiếu ở một số đối tượng sẽ được thêm ,omitempty.
FAQ
Tôi có thể chuyển đổi mảng JSON ở cấp gốc không?
Có. Công cụ tạo type AutoGenerated []struct{...}, kết hợp các trường của mọi đối tượng trong mảng.
Tại sao trường null của tôi có kiểu any?
Giá trị null không mang thông tin về kiểu. Hãy thay any bằng con trỏ như *string hoặc *time.Time để vẫn hỗ trợ nil.
Công cụ có tạo các struct lồng nhau có tên không?
Không. Các đối tượng lồng nhau là struct ẩn danh nội tuyến. Hãy tự chuyển chúng thành kiểu có tên nếu cần tham chiếu đến chúng.