แปลง JSON เป็นโครงสร้าง Go
สร้างนิยาม struct ของ Go จาก JSON ด้วย json-to-go ที่พอร์ตมา และจัดรูปแบบด้วย gofmt คีย์จะเป็นฟิลด์ CamelCase ที่ส่งออกได้พร้อมแท็ก json:"..." ออบเจ็กต์ซ้อนกันเป็น struct นิรนามแบบอินไลน์ และ null เป็น any
เขียน struct สำหรับใช้ json.Unmarshal กับผลตอบกลับ REST API ของผู้ให้บริการอื่น
เหมาะกับงานแบบไหน
- เขียน struct สำหรับใช้ json.Unmarshal กับผลตอบกลับ REST API ของผู้ให้บริการอื่น
- เริ่มสร้างชนิดข้อมูลคำขอและผลตอบกลับสำหรับ HTTP handler ของ Go จากตัวอย่างเพย์โหลด
วิธีใช้
- วางออบเจ็กต์หรืออาร์เรย์ JSON ในตัวแก้ไขด้านซ้าย
- ตรวจดู struct ที่สร้าง ชนิดข้อมูลรากจะชื่อ AutoGenerated เสมอ
- คัดลอกลงแพ็กเกจ เปลี่ยนชื่อชนิดข้อมูล และแยก 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 นิรนามแบบอินไลน์ หากต้องอ้างอิงให้ย้ายไปเป็นชนิดข้อมูลที่มีชื่อด้วยตนเอง