胡子哥哥
// ServeJson sends a json response with encoding charset.func (c *Controller) ServeJson(encoding ...bool) { var hasIndent bool
var hasencoding bool
if RunMode == "prod" {
hasIndent = false
} else {
hasIndent = true
} if len(encoding) > 0 && encoding[0] == true {
hasencoding = true
}
c.Ctx.Output.Json(c.Data["json"], hasIndent, hasencoding)
}// Json writes json to response body.// if coding is true, it converts utf-8 to \u0000 type.func (output *BeegoOutput) Json(data interface{}, hasIndent bool, coding bool) error {
output.Header("Content-Type", "application/json; charset=utf-8") var content []byte
var err error if hasIndent {
content, err = json.MarshalIndent(data, "", " ")
} else {
content, err = json.Marshal(data)
} if err != nil {
http.Error(output.Context.ResponseWriter, err.Error(), http.StatusInternalServerError) return err
} if coding {
content = []byte(stringsToJson(string(content)))
}
output.Body(content) return nil}实际这个方法是对json序列化和 http 响应的封装, 只是直接把 c.Data["json"] 传递给json组件了而已, json 内部会进行反射, 会自动处理指针类型的数据,和我们平时使用没有任何区别, 只要是 json组件可以序列化的数据都可以给 c.Data["json"] ,而 c.Data 是 map[interface{}]interface{} 类型的数据