如何防止转义 JSON 编码器生成的字符串中的某些字符?

How to prevent escaping certain characters in strings produced by JSON encoder?

我有一张地图可以保存 json 个条目。这是我的代码的预览。

mp := map[string]string{"key": "The Knight & Day"}
fmt.Println(mp)
bty3, err := json.Marshal(mp)
fmt.Println(bty3, err)
fmt.Println(string(bty3))

输出如下-

map[key:The Knight & Day]
[123 34 107 101 121 34 58 34 84 104 101 32 75 110 105 103 104 116 32 92 117 48 48 50 54 32 68 97 121 34 125] <nil>
{"key":"The Knight \u0026 Day"}

我该怎么做才能保留特殊字符?

encoding/json docs显示默认转义的字符为<>&

您可以使用strconv.Unquote like in this answer:

像这样简单明了的方法也行:

bty3 = bytes.Replace(bty3, []byte(`\u003c`), []byte("<"), -1)
bty3 = bytes.Replace(bty3, []byte(`\u003e`), []byte(">"), -1)
bty3 = bytes.Replace(bty3, []byte(`\u0026`), []byte("&"), -1)

在即将发布的 Go1.7 版本中,您可以使用 SetEscapeHTML(false)json.Encoder 中关闭转义。

mp := map[string]string{"key": "The Knight & Day"}
var buf bytes.Buffer

enc := json.NewEncoder(&buf)
enc.SetEscapeHTML(false)
enc.Encode(mp)

fmt.Println(&buf)

打印

{"key":"The Knight & Day"}