json - 反序列化“oneOf”结构的 Json 数组
问题描述
我有 JSON 文档,其中包含一个数组,其中每个项目都是字符串或表示对象的映射。
{"oneOfArray": ["str1", "str2", {"SomeStruct": "value3"}, "str4", {"SomeStruct": "value5"} ]}
如何创建代表这种结构并通过json
包提供反序列化的 Go 类?
解决方案
Go 中还没有通用支持,因此您无法创建一个数组来表示来自 JSON 的不同类型的值。
一种方法是使用 type 的切片,[]interface{}
包encoding/json
将选择类型本身来解组,这将map[string]interface{}
用于 JSON 对象。
您可以使用这种类型对外部对象进行建模:
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]]}
推荐阅读
- python - 如何计算熊猫的条件?
- javascript - 带有远程存储的 ExtJS 6 过滤器组合框下拉菜单
- python - 如何复制 polyfit 线以识别数据末端
- html - div 相互重叠,z-index 不起作用
- kubernetes - OKD 3.11 Ansible Inventory [lb] 中的多个主机
- javascript - NodeJS:关闭 Mongod 会使应用程序崩溃
- android - kotlin如何使用协程范围调用web服务和处理错误
- amazon-web-services - 如何从 Cloud Formation 模板启用/禁用 Cloudfront 日志记录?
- typescript - 在编译时将文件作为字符串导入
- apache-kafka - 在 Windows 上运行 Kafka Connect 时如何解决 classNotFoundException 警告?