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"})