Chuyển đến nội dung

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.

JSON

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

  1. Dán đối tượng hoặc mảng JSON vào trình soạn thảo bên trái.
  2. Xem struct được tạo; kiểu gốc luôn có tên AutoGenerated.
  3. 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.

Đặc tả và tài liệu tham khảo