偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Gin 框架 JSON 格式返回結(jié)果的使用方式

開發(fā) 前端
本文我們介紹 Gin 框架為 JSON 提供的幾種易于使用的 API。gin.H? 是 map[string]interface{} 的一種快捷方式。

1.介紹

Gin 框架為 JSON、XML 和 HTML 渲染提供了易用的API。

本文我們主要介紹 JSON 的使用方式。

2.JSON

在 Go 項(xiàng)目開發(fā)中,當(dāng)開發(fā) HTTP API 時(shí),我們通常提供 JSON 格式的返回結(jié)果。

Go 框架為 JSON 渲染提供了易用的 API。

普通 JSON

示例代碼:

func main() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  c.JSON(200, gin.H{
   "ping": "pong",
  })
 })
 err := r.Run()
 if err != nil {
  return
 }
}

輸出結(jié)果:

curl -s -X GET http://127.0.0.1:8080 | jq
{
  "ping": "pong"
}

閱讀上面這段代碼,我們可以發(fā)現(xiàn),使用 c.JSON() 方法,即可返回 JSON 格式的返回結(jié)果。

具有轉(zhuǎn)義的非 ASCII 字符的 ASCII-only JSON

示例代碼:

func main() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  c.AsciiJSON(200, gin.H{
   "ping": "<b>pong</b>",
  })
 })
 err := r.Run()
 if err != nil {
  return
 }
}

輸出結(jié)果:

curl -s -X GET http://127.0.0.1:8080     
{"ping":"\u003cb\u003epong\u003c/b\u003e"}

閱讀上面這段代碼,我們使用 c.AsciiJSON() 方法,生成有轉(zhuǎn)義的非 ASCII 字符的 ASCII-only JSON。

跨域請(qǐng)求

示例代碼:

func main() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  c.JSONP(200, gin.H{
   "ping": "pong",
  })
 })
 err := r.Run()
 if err != nil {
  return
 }
}

輸出結(jié)果:

curl -s -X GET http://127.0.0.1:8080\?callback\=x
x({"ping":"pong"});

閱讀上面這段代碼,我們使用 c.JSONP() 方法,使用 JSONP 向不同域的服務(wù)器請(qǐng)求數(shù)據(jù)。如果查詢參數(shù)存在回調(diào),則將回調(diào)添加到響應(yīng)體中。

PureJSON

示例代碼:

func main() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  c.PureJSON(200, gin.H{
   "ping": "<b>pong</b>",
  })
 })
 err := r.Run()
 if err != nil {
  return
 }
}

輸出結(jié)果:

curl -s -X GET http://127.0.0.1:8080 | jq
{
  "ping": "<b>pong</b>"
}

閱讀上面這段代碼,我們使用 c.PureJSON() 方法,輸出字面字符。

SecureJSON

示例代碼:

func main() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  names := []string{"lena", "austin", "foo"}
  c.SecureJSON(200, names)
 })
 err := r.Run()
 if err != nil {
  return
 }
}

輸出結(jié)果:

curl -s -X GET http://127.0.0.1:8080     
while(1);["lena","austin","foo"]

閱讀上面這段代碼,我們使用 c.SecureJSON() 方法,防止 json 劫持。如果給定的結(jié)構(gòu)是數(shù)組值,則默認(rèn)預(yù)置 "while(1)," 到響應(yīng)體。

我們也可以使用 r.SecureJsonPrefix(")]}',\n") 自定義 SecureJSON 前綴。

3.總結(jié)

本文我們介紹 Gin 框架為 JSON 提供的幾種易于使用的 API。

gin.H 是 map[string]interface{} 的一種快捷方式。

返回結(jié)果也可以使用一個(gè)結(jié)構(gòu)體。

示例代碼:

func main() {
 r := gin.Default()
 r.GET("/", func(c *gin.Context) {
  var msg struct {
   Name    string `json:"user"`
   Message string
   Number  int
  }
  msg.Name = "Lena"
  msg.Message = "hey"
  msg.Number = 123
  c.JSON(http.StatusOK, msg)
 })
 err := r.Run()
 if err != nil {
  return
 }
}

輸出結(jié)果:

curl -s -X GET http://127.0.0.1:8080 | jq
{
  "user": "Lena",
  "Message": "hey",
  "Number": 123
}

閱讀上面這段代碼,我們使用一個(gè)結(jié)構(gòu)體,輸出 JSON 格式的返回結(jié)果。

注意 msg.Name 在 JSON 中變成了 "user",因?yàn)槲覀冊(cè)诮Y(jié)構(gòu)體中定義的 tag 為 json:"user"。

責(zé)任編輯:武曉燕 來源: Golang語言開發(fā)棧
相關(guān)推薦

2024-11-04 08:16:08

Go語言Web 框架

2024-12-09 00:00:15

Gin框架中間件

2024-02-02 10:40:40

2023-11-28 14:32:04

2024-11-18 09:18:21

Gin框架驗(yàn)證器

2024-12-16 00:48:39

Gin框架函數(shù)

2019-07-22 08:49:37

PythonJSON編程語言

2010-01-07 16:29:33

使用Json

2024-02-06 14:05:00

Go中間件框架

2025-03-31 01:30:00

Gin框架模型

2010-01-06 15:03:34

JSON格式封裝

2010-01-06 13:23:20

JSON數(shù)據(jù)格式

2010-01-08 09:03:38

返回JSON數(shù)據(jù)

2024-02-19 07:40:10

2024-03-05 07:55:41

框架GINGo

2024-11-11 00:45:54

Gin框架字段

2024-12-24 10:50:05

GinWeb開發(fā)

2022-11-22 11:47:25

JSON格式外置表單

2024-01-30 12:08:31

Go框架停止服務(wù)

2021-09-09 10:23:08

GinNetHttp
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)