我有这个模板:
var ListTemplate = ` { "resources": [ {{ StringsJoin . ", " }} ] } `
呈现为:
JoinFunc := template.FuncMap{"StringsJoin": strings.Join} tmpl := template.Must(template.New("").Funcs(JoinFunc).Parse(ListTemplate))
如果我将其发送到http.ResponseWriter,则输出文本将转义。
var list []string tmpl.Execute(w, list)
我怎么能这样写一个json?
您不应该使用Go的模板引擎(也不text/template是html/template)来生成JSON输出,因为模板引擎不了解JSON语法和规则(转义)。
text/template
html/template
而是使用encoding/json包来生成JSON。您可以用来json.Encoder直接将响应写入/流式传输到io.Writer,例如http.ResponseWriter。
encoding/json
json.Encoder
io.Writer
http.ResponseWriter
例:
type Output struct { Resources []string `json:"resources"` } obj := Output{ Resources: []string{"r1", "r2"}, } enc := json.NewEncoder(w) if err := enc.Encode(obj); err != nil { // Handle error fmt.Println(err) }
输出(在Go Playground上尝试):
{"resources":["r1","r2"]}