我有此模板:
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?
答案 0 :(得分:4)
您不应使用Go的模板引擎(text/template
和html/template
)来生成JSON输出,因为模板引擎不了解JSON语法和规则(转义)。
请改为使用encoding/json
包来生成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"]}