diff --git a/controller.go b/controller.go index aaec16ba..a563a56b 100644 --- a/controller.go +++ b/controller.go @@ -214,13 +214,16 @@ func (c *Controller) Abort(code string) { panic(code) } -func (c *Controller) ServeJson() { +func (c *Controller) ServeJson(encoding ...bool) { content, err := json.MarshalIndent(c.Data["json"], "", " ") if err != nil { http.Error(c.Ctx.ResponseWriter, err.Error(), http.StatusInternalServerError) return } c.Ctx.ResponseWriter.Header().Set("Content-Type", "application/json;charset=UTF-8") + if len(encoding) > 0 && encoding[0] == true { + content = []byte(stringsToJson(string(content))) + } c.writeToWriter(content) } diff --git a/utils.go b/utils.go index 5cc0707e..35f1aeb0 100644 --- a/utils.go +++ b/utils.go @@ -232,3 +232,17 @@ func ParseForm(form url.Values, obj interface{}) error { } return nil } + +func stringsToJson(str string) string { + rs := []rune(str) + jsons := "" + for _, r := range rs { + rint := int(r) + if rint < 128 { + jsons += string(r) + } else { + jsons += "\\u" + strconv.FormatInt(int64(rint), 16) // json + } + } + return jsons +}