在使用Gin進行開發(fā)時,有時需要返回多層嵌套的JSON數(shù)據(jù)。下面我們來看如何使用Gin返回多層JSON數(shù)據(jù)。
首先,我們需要定義一個結(jié)構(gòu)體來表示JSON數(shù)據(jù)的結(jié)構(gòu):
type Person struct { Name string `json:"name"` Age int `json:"age"` Address struct { Street string `json:"street"` City string `json:"city"` } `json:"address"` }
其中,Address字段也是一個結(jié)構(gòu)體,表示Person的地址信息。我們在這里嵌套了一層結(jié)構(gòu)體,以此模擬多層嵌套的JSON數(shù)據(jù)。
接下來,我們需要定義一個路由來返回這個Person的JSON數(shù)據(jù):
func main() { router := gin.Default() router.GET("/person", func(c *gin.Context) { person := Person{"張三", 20, struct { Street string `json:"street"` City string `json:"city"` }{ "北京路", "廣州市", }} c.JSON(200, person) }) router.Run() }
在這里我們通過c.JSON方法返回了一個HTTP狀態(tài)碼200和person對象,Gin會自動將該對象序列化為JSON格式,并將其作為響應數(shù)據(jù)發(fā)送給客戶端。這里要注意的是,我們在定義Person結(jié)構(gòu)體時,給每個字段都添加了json標簽。這個標簽會在序列化JSON數(shù)據(jù)時起到作用。
運行程序后,我們可以通過瀏覽器訪問http://localhost:8080/person來得到以下JSON數(shù)據(jù):
{ "name": "張三", "age": 20, "address": { "street": "北京路", "city": "廣州市" } }
可以看到,返回的JSON數(shù)據(jù)包含了多層嵌套的數(shù)據(jù)結(jié)構(gòu)。