JSON 区分大小写解组结构

问题描述 投票:0回答:2

有没有办法让 json.Unmarshal not 接受不区分大小写的匹配?我收到带有“e”和“E”等标签的 JSON,并且想要解组带有标签“e”的对象,但忽略带有“E”的对象。现在我发现的唯一解决方案是定义一个包含两个标签的结构,然后简单地忽略标签“E”,但我正在寻找一个更干净的解决方案。

来自官方文档:

要将 JSON 解组为结构,Unmarshal 会将传入的对象键与 Marshal 使用的键(结构体字段名称或其标签)进行匹配,首选完全匹配,但也接受不区分大小写的匹配。

json go unmarshalling
2个回答
28
投票

不幸的是,这不是标准 json 库当前支持的东西。

根据https://golang.org/pkg/encoding/json/#Unmarshal

Unmarshal 将传入的对象键与 Marshal 使用的键(结构体字段名称或其标签)进行匹配,首选精确匹配,但也接受不区分大小写的匹配

无法关闭此行为。


0
投票

也可以添加特殊类型的字段,该字段会忽略 jsonon 解组:

type JsonIgnored struct {}

func (j *JsonIgnored) UnmarshalJSON([]byte) error {
  return nil
}

type Message struct {
  Ignored JsonIgnored`json:"e"`
  EventId int64      `json:"E"`
}
© www.soinside.com 2019 - 2024. All rights reserved.