ginjson是基於Go語言的框架gin和標準庫encoding/json實現的一種中間件,主要用於將返回的數據格式轉換為JSON格式。如果你需要構建RESTfulAPI,ginjson將是一個好的選擇。
一、ginjson的安裝和使用
在使用ginjson之前,需要先安裝gin框架。可以通過以下命令進行安裝:
go get -u github.com/gin-gonic/gin安裝ginjson:
go get -u github.com/tianlin/ginjson在main.go中添加以下代碼即可使用:
import (
    "github.com/gin-gonic/gin"
    "github.com/tianlin/ginjson"
)
 
func main() {
    r := gin.Default()
    r.Use(ginjson.Middleware())
    r.GET("/test", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "Hello World!",
        })
    })
    r.Run()
}二、ginjson的優點
1、易於使用
ginjson非常易於使用,只需要加上一個中間件即可將返回的數據格式轉換為JSON格式。
2、靈活性
 ginjson可以很好地處理不同的數據類型,無論是字符串、數組、結構體,還是自己定義的類型。
3、高性能
ginjson的性能非常高效,通過緩存方式來提高序列化和反序列化的效率,因此可以輕鬆地處理大量的請求。
三、ginjson與gin的集成
ginjson與gin的集成非常簡單。只需要使用中間件,即可將返回的數據格式轉換為JSON格式,並且還支持自定義JSON的響應頭信息。
以下代碼演示了如何使用ginjson自定義JSON的響應頭信息:
r := gin.Default()
r.Use(ginjson.Middleware(ginjson.DefaultConfig().SetEscapeHTML(false)))
r.GET("/user", func(c *gin.Context) {
   data:=struct{
      Name string
      Age  int
   }{
      Name:"張三",
      Age:18,
   }
   c.Header("user", "application/json; charset=utf-8")
   c.JSON(200, data)
})四、ginjson實現自定義響應
如果您想定製化JSON的響應格式,ginjson也提供相應的API。下面的示例代碼演示了如何自定義JSON的響應格式:
type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
 
func Handler(c *gin.Context) {
    user := User{
        Name: "張三",
        Age:  18,
    }
    c.Set("result", user)
    c.Set("msg", "ok")
    c.Set("status", 200)
    c.Next()
}
 
func main() {
    r := gin.Default()
 
    r.Use(ginjson.Middleware(ginjson.DefaultConfig()))
 
    r.GET("/test", Handler, func(c *gin.Context) {
        result := c.MustGet("result").(User)
        msg := c.MustGet("msg").(string)
        status := c.MustGet("status").(int)
        c.JSON(status, gin.H{
            "code": status,
            "msg":  msg,
            "data": result,
        })
    })
    r.Run()
}五、ginjson常見問題
1、如何處理空指針異常?
在使用ginjson返回數據時,如果返回了空指針,則會拋出異常。為了避免這種情況,可以使用Safe模式。
以下示例代碼演示了如何使用Safe模式:
r := gin.Default()
r.Use(ginjson.Middleware(ginjson.Safe()))
r.GET("/test", func(c *gin.Context) {
   var data *int
   // 當data為空指針時,不會拋出異常
   c.JSON(200, data)
})2、如果想要關閉HTML轉義怎麼辦?
默認情況下,ginjson將自動進行HTML轉義,為了關閉,可以使用SetEscapeHTML(false)。
以下示例代碼演示了如何關閉 HTML轉義:
r := gin.Default()
r.Use(ginjson.Middleware(ginjson.DefaultConfig().SetEscapeHTML(false)))
r.GET("/test", func(c *gin.Context) {
    c.JSON(200, map[string]interface{}{
        "html":"Hello,World!
",
    })
})3、gojson有已經被廢棄了嗎?
是的,在ginjson的早期版本中,使用了gojson,但是由於該庫有安全性問題,因此已經廢棄了。現在,ginjson使用標準庫encoding/json作為替代方案,再也無須擔心安全問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/254374.html
 
 微信掃一掃
微信掃一掃  支付寶掃一掃
支付寶掃一掃 