gin从入门到放弃

json处理

2019-10-15  本文已影响0人  寒云暮雨

项目当中我们免不了json处理,尤其是现在前后端分类的大趋势下,这篇我们就讲讲常用的json处理

/*
@Author :   寒云
@Email  :   1355081829@qq.com
@Time : 2019/10/15 11:51
*/
package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()
    r.GET("/json", func(c *gin.Context) {
        data := map[string]interface{}{
            "name": "hanyun",
            "html": "<b>Hello, world!</b>",
        }
        c.JSON(http.StatusOK, data)
    })
    r.GET("/jsonp", func(c *gin.Context) {
        data := map[string]interface{}{
            "name": "hanyun",
        }
        c.JSONP(http.StatusOK, data)
    })

    r.GET("/purejson", func(c *gin.Context) {
        c.PureJSON(200, gin.H{
            "html": "<b>Hello, world!</b>",
        })
    })

    _ = r.Run(":8089")
}

我们建立了三个路由
1、访问http://127.0.0.1:8089/json

{"html":"\u003cb\u003eHello, world!\u003c/b\u003e","name":"hanyun"}

我们发现里面的HTML代码被转义了
2、访问http://127.0.0.1:8089/purejson

{"html":"<b>Hello, world!</b>"}

HTML代码原封不动的显示出来
3、访问http://127.0.0.1:8089/jsonp?callback=callback

callback({"name":"hanyun"})

我们返回了一个jsonp数据
查看jsonp的源码

func (c *Context) JSONP(code int, obj interface{}) {
    callback := c.DefaultQuery("callback", "")
    if callback == "" {
        c.Render(code, render.JSON{Data: obj})
        return
    }
    c.Render(code, render.JsonpJSON{Callback: callback, Data: obj})
}

我们发现他有个默认的参数用于返回jsonp的前缀
更改我们的访问链接地址http://127.0.0.1:8089/jsonp?callback=hanyun
我们返回的jsonp格式如下

hanyun({"name":"hanyun"})
上一篇下一篇

猜你喜欢

热点阅读