ข้ามไปยังเนื้อหา

แปลง JSON เป็นโครงสร้าง Go

สร้างนิยาม struct ของ Go จาก JSON ด้วย json-to-go ที่พอร์ตมา และจัดรูปแบบด้วย gofmt คีย์จะเป็นฟิลด์ CamelCase ที่ส่งออกได้พร้อมแท็ก json:"..." ออบเจ็กต์ซ้อนกันเป็น struct นิรนามแบบอินไลน์ และ null เป็น any

เขียน struct สำหรับใช้ json.Unmarshal กับผลตอบกลับ REST API ของผู้ให้บริการอื่น

JSON

Go

เหมาะกับงานแบบไหน

  • เขียน struct สำหรับใช้ json.Unmarshal กับผลตอบกลับ REST API ของผู้ให้บริการอื่น
  • เริ่มสร้างชนิดข้อมูลคำขอและผลตอบกลับสำหรับ HTTP handler ของ Go จากตัวอย่างเพย์โหลด

วิธีใช้

  1. วางออบเจ็กต์หรืออาร์เรย์ JSON ในตัวแก้ไขด้านซ้าย
  2. ตรวจดู struct ที่สร้าง ชนิดข้อมูลรากจะชื่อ AutoGenerated เสมอ
  3. คัดลอกลงแพ็กเกจ เปลี่ยนชื่อชนิดข้อมูล และแยก struct อินไลน์เป็นชนิดข้อมูลที่มีชื่อหากต้องใช้ซ้ำ

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"`
}

รายละเอียดและข้อจำกัด

สร้างในเบราว์เซอร์ ไม่มีการตั้งค่าชื่อชนิดข้อมูล struct แบบอินไลน์หรือมีชื่อ หรือแท็ก

คำย่อจะเป็นตัวพิมพ์ใหญ่ (id เป็น ID) และ snake_case เปลี่ยนเป็น CamelCase โดยเก็บคีย์เดิมในแท็ก json

จำนวนเต็มเป็น int (int64 เมื่อมีค่ามาก) ทศนิยมเป็น float64 ส่วน null อาร์เรย์ว่าง และอาร์เรย์ผสมเป็น any หรือ []any

เมื่อออบเจ็กต์ในอาร์เรย์ต่างกัน คีย์ที่ไม่มีในบางออบเจ็กต์จะได้ ,omitempty

FAQ

แปลง JSON ที่รากเป็นอาร์เรย์ได้หรือไม่?

ได้ จะสร้าง type AutoGenerated []struct{...} โดยรวมฟิลด์ของทุกออบเจ็กต์ในอาร์เรย์

ทำไมฟิลด์ null จึงเป็นชนิด any?

ค่า null ไม่มีข้อมูลชนิด แทน any ด้วยพอยน์เตอร์ เช่น *string หรือ *time.Time เพื่อคงการรองรับ nil

สร้าง struct ซ้อนกันที่มีชื่อหรือไม่?

ไม่ ออบเจ็กต์ซ้อนกันเป็น struct นิรนามแบบอินไลน์ หากต้องอ้างอิงให้ย้ายไปเป็นชนิดข้อมูลที่มีชื่อด้วยตนเอง

ข้อกำหนดและแหล่งอ้างอิง