我有JSON文档,其中包含一个数组,其中每个项目都是字符串或表示对象的映射。
{"oneOfArray": ["str1", "str2", {"SomeStruct": "value3"}, "str4", {"SomeStruct": "value5"} ]}
如何创建代表这种结构的Go类并通过json
包提供反序列化?
答案 0 :(得分:1)
Go尚无通用支持(因此),因此您无法创建一个数组来表示来自JSON的不同类型的值。
一种方法是使用类型为[]interface{}
的切片,并且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]]}