我有一个包含数组的 JSON 文档,其中每个项目都是一个字符串或表示一个对象的映射。
{"oneOfArray": ["str1", "str2", {"SomeStruct": "value3"}, "str4", {"SomeStruct": "value5"} ]}
如何创建表示这种结构的 Go 类并通过 json
包提供反序列化?
最佳答案
Go(目前)还没有泛型支持,因此您无法创建一个数组来表示来自 JSON 的不同类型的值。
一种方法是使用 []interface{}
类型的 slice ,以及 encoding/json
包将自己选择要解码的类型,对于 JSON 对象,这将是 map[string]interface{}
。
您可以使用此类型对外部对象建模:
type Obj struct {
OneOfArray []interface{} `json:"oneOfArray"`
}
解码输入的示例:
src := `{"oneOfArray": ["str1", "str2", {"SomeStruct": "value3"}, "str4", {"SomeStruct": "value5"} ]}`
var obj Obj
if err := json.Unmarshal([]byte(src), &obj); err != nil {
panic(err)
}
fmt.Println(obj)
输出(在 Go Playground 上尝试):
{[str1 str2 map[SomeStruct:value3] str4 map[SomeStruct:value5]]}
关于json - 反序列化 "oneOf"结构的 Json 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54455223/