1 回答
TA贡献1827条经验 获得超4个赞
只需创建一个同时包含两个字段的类型:
type MyType struct {
Foo *fooStruct `json:"foo,omitempty"`
Bar *barStruct `json:"bar,omitempty"`
OtherKey string `json:"other_key"`
}
将 JSON 解组为该类型,只需检查 igFoo和 or Barare nil 即可了解您正在使用的数据。
这是一个 playground Demo,展示了它的样子
它的本质是:
type Foo struct {
Field int `json:"field1"`
}
type Bar struct {
Message string `json:"field2"`
}
type Payload struct {
Foo *Foo `json:"foo,omitempty"`
Bar *Bar `json:"bar,omitempty"`
Other string `json:"another_field"`
}
和字段是指针类型,因为值字段会使确定实际设置Foo了Bar哪个字段变得更加麻烦。该omitempty位允许您编组相同的类型以重新创建原始有效负载,因为nil值不会显示在输出中。
要检查原始 JSON 字符串中设置了哪个字段,只需编写:
var data Payload
if err := json.Unmarshal([]byte(jsonString), &data); err != nil {
// handle error
}
if data.Foo == nil && data.Bar == nil {
// this is probably an error-case you need to handle
}
if data.Foo == nil {
fmt.Println("Bar was set")
} else {
fmt.Println("Foo was set")
}
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报