繁体   English   中英

使用模板将json输出到http.ResponseWriter

[英]Ouput json to http.ResponseWriter with template

我有这个模板:

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/templatehtml/template text/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"]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM