讨论数量:
- 可以直接把 3 个字符替换掉
- 在序列化的时候,不要转义
var buf strings.Builder enc := json.NewEncoder(buf) enc.SetEscapeHTML(false) // 不转义 _ = enc.Encode(v) jsonStr := strings.TrimSuffix(buf.String(), "\n")
- 关于打印哪里,你可以看下 log 包是不是对内容进行处理,有些 log 包会把对象进行 json.Marshal 处理
package main
import (
"encoding/json"
"fmt"
"html"
)
type Person struct {
Name string
}
func main() {
p := Person{
Name: "John & Doe",
}
// 把字符串中的特殊字符转义为 HTML 实体
p.Name = html.HTMLEscapeString(p.Name)
// 使用 json.Marshal 函数进行编码
jsonData, err := json.Marshal(p)
if err != nil {
fmt.Println("Error: ", err)
return
}
fmt.Println(string(jsonData))
}
输出如下:
{"Name":"John & Doe"}
可能是我描述的有问题,我再仔细对比了一下。
是我的
logx
包里的两个logx.Info
和logx.Infov
的打印区别。logx.Info
打印的是string
类型(\u0026
会转为便于阅读的&
)logx.Infov
打印的是interface
类型,也就是源数据(包含\u0026
)