有没有办法让 json.Unmarshal not 接受不区分大小写的匹配?我收到带有“e”和“E”等标签的 JSON,并且想要解组带有标签“e”的对象,但忽略带有“E”的对象。现在我发现的唯一解决方案是定义一个包含两个标签的结构,然后简单地忽略标签“E”,但我正在寻找一个更干净的解决方案。
来自官方文档:
要将 JSON 解组为结构,Unmarshal 会将传入的对象键与 Marshal 使用的键(结构体字段名称或其标签)进行匹配,首选完全匹配,但也接受不区分大小写的匹配。
不幸的是,这不是标准 json 库当前支持的东西。
根据https://golang.org/pkg/encoding/json/#Unmarshal
Unmarshal 将传入的对象键与 Marshal 使用的键(结构体字段名称或其标签)进行匹配,首选精确匹配,但也接受不区分大小写的匹配
无法关闭此行为。
也可以添加特殊类型的字段,该字段会忽略 jsonon 解组:
type JsonIgnored struct {}
func (j *JsonIgnored) UnmarshalJSON([]byte) error {
return nil
}
type Message struct {
Ignored JsonIgnored`json:"e"`
EventId int64 `json:"E"`
}