在使用Gin進(jìn)行開(kāi)發(fā)時(shí),有時(shí)需要返回多層嵌套的JSON數(shù)據(jù)。下面我們來(lái)看如何使用Gin返回多層JSON數(shù)據(jù)。
首先,我們需要定義一個(gè)結(jié)構(gòu)體來(lái)表示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字段也是一個(gè)結(jié)構(gòu)體,表示Person的地址信息。我們?cè)谶@里嵌套了一層結(jié)構(gòu)體,以此模擬多層嵌套的JSON數(shù)據(jù)。
接下來(lái),我們需要定義一個(gè)路由來(lái)返回這個(gè)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() }
在這里我們通過(guò)c.JSON方法返回了一個(gè)HTTP狀態(tài)碼200和person對(duì)象,Gin會(huì)自動(dòng)將該對(duì)象序列化為JSON格式,并將其作為響應(yīng)數(shù)據(jù)發(fā)送給客戶(hù)端。這里要注意的是,我們?cè)诙xPerson結(jié)構(gòu)體時(shí),給每個(gè)字段都添加了json標(biāo)簽。這個(gè)標(biāo)簽會(huì)在序列化JSON數(shù)據(jù)時(shí)起到作用。
運(yùn)行程序后,我們可以通過(guò)瀏覽器訪(fǎng)問(wèn)http://localhost:8080/person來(lái)得到以下JSON數(shù)據(jù):
{ "name": "張三", "age": 20, "address": { "street": "北京路", "city": "廣州市" } }
可以看到,返回的JSON數(shù)據(jù)包含了多層嵌套的數(shù)據(jù)結(jié)構(gòu)。