当前位置: 首页 > 面试题库 >

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

彭博厚
2023-03-14
问题内容

我有这个模板:

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)来生成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"]}


 类似资料:
  • 问题内容: 我在将选项卡中的JSON输出到HTML表时遇到了麻烦(这是javascript / jQuery夜间课程分配的一部分)。请有人看看,并建议我要对表格格式的输出进行哪些修改?我收到成功警报,但表未填充。 谢谢。 和HTML: 问题答案: 代码的主要问题是,在AJAX请求成功完成后,您没有调用任何函数。您至少需要致电才能填充数据。 但是,您可以对代码进行一些改进。首先,删除。这是默认值,并

  • 内容输出方法为:display() 将模板内容输出: $this->display(); //调用默认对应模板

  • 问题内容: 我在理解如何利用docker的–format选项方面遇到一些困难。 例如,如果我运行“ docker images”,则会得到以下信息: 我想以JSON格式获取“ repo1”图像的结果。我找到了以下页面:https : //docs.docker.com/config/formatting/。对于“ json”示例,它提到使用“ go formatting”,但是提供的链接很难建立连

  • 假设在一个在线商店的应用系统中需要一个HTML页面,和下面这个页面类似: <html> <head> <title>Welcome!</title> </head> <body> <h1>Welcome John Doe!</h1> <p>Our latest product: <a href="products/greenmouse.html">green mouse</a>!

  • 模板使用方式 protoc-gen-doc 插件支持模板,可以通过使用不同的模板来定制输出的内容和格式,命令如下: protoc --doc_out=/usr/local/include/dolphin/api.mustache,index.html:../../../target/contract-doc userService.proto 只是简单的将原来 --doc_out=html,* 中

  • 我想有一个字符串的freemarker模板输出。我有一个freemarker模板文件commonTemplate。ftl。 Java代码填充模型并将输出打印到控制台App.java. 它适用于控制台输出。