1 回答
TA贡献1811条经验 获得超5个赞
在Marshal
json 包的文档中https://pkg.go.dev/encoding/json#Marshal你会发现以下段落:
字符串值编码为强制为有效 UTF-8 的 JSON 字符串,用 Unicode 替换符文替换无效字节。为了将 JSON 安全地嵌入到 HTML 标签中,字符串使用 HTMLEscape 编码,它替换了“<”、“>”、“&”,U+2028 和 U+2029 被转义为“\u003c”, “\u003e”、“\u0026”、“\u2028”和“\u2029”。使用编码器时,可以通过调用 SetEscapeHTML(false) 禁用此替换。
因此,请尝试使用Encoder
, 示例:
package main
import (
"bytes"
"encoding/json"
"fmt"
)
type Foo struct {
Name string
Surname string
Likes map[string]interface{}
Hates map[string]interface{}
newGuy bool //rpcclonable
}
func main() {
foo := &Foo{
Name: "George",
Surname: "Denkin",
Likes: map[string]interface{}{
"Sports": "volleyball",
"Message": "<Geroge> play volleyball <usually>",
},
}
buf := &bytes.Buffer{} // or &strings.Builder{} as from the example of @mkopriva
enc := json.NewEncoder(buf)
enc.SetEscapeHTML(false)
err := enc.Encode(foo)
if err != nil {
return
}
fmt.Println(buf.String())
}
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报