首页 > 解决方案 > HTML 脚本标签中的 Golang JSON

问题描述

我正在尝试使用 go 模板在 Go 中创建 html 电子邮件内容。在 html 电子邮件内容中,我需要像这样存储 JSON 数据:

<script type ="application/ld+json">
   [
   { JSON Object},
   { JSON Object}
   ]
</script>

不幸的是,我不知道如何用 go lang 做到这一点。这是我到目前为止所尝试的:

tr, err := template.New("tr").Parse("<html><body><script type=\"application/ld+json\">{{.}}</script></body></html>")
if err != nil {
    log.Fatal(err)
}

var doc bytes.Buffer
err = tr.Execute(&doc, template.HTML(emailModel))
if err != nil {
    log.Fatal(err)
}

emailHtmlContent := doc.String()

fmt.Println(emailHtmlContent)

当我执行此操作时,JSON 存储在字符串的 "" 双引号中。如果我使用<pre>标签,则不会显示双引号,但我需要将 JSON 存储在脚本标签中。有没有办法解决这个问题?

已经谢谢了!

标签: htmljsongo

解决方案


您可以text/template改用,它不会转义字符串。

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "log"
    "text/template"
)

type Student struct {
    Id   string `json:"id"`
    Name string `json:"name"`
}

func main() {
    emailModel, err := json.Marshal(Student{Id: "m", Name: "k"})
    if err != nil {
        log.Fatal(err)
    }
    tr, err := template.New("tr").Parse("<html><body><script type=\"application/ld+json\">{{.}}</script></body></html>")
    if err != nil {
        log.Fatal(err)
    }

    var doc bytes.Buffer
    err = tr.Execute(&doc, string(emailModel))
    if err != nil {
        log.Fatal(err)
    }

    emailHtmlContent := doc.String()

    fmt.Println(emailHtmlContent)
}

推荐阅读