json - 使用嵌套的 map[string] 接口解组 JSON
问题描述
我有一个 json,它就像一个嵌套的 map[string]interface{},我似乎无法解析它,它看起来像
{
"data": {
"xtoy": {
"1": 2,
"2": 3,
"3": 4
},
"atob": {
"1": 4,
"2": 5,
"3": 6
},
"mton": {
"1": 9,
"2": 8,
"3": 7
},
"itemdetails": {
"1": {
"item": {
"id": 1,
"name": "item1"
},
"details": {
"details": {
"1": {
"product": {
"id": 1,
"type": "premium"
}
}
}
}
}
}
},
"Date": "2011-07-01"
}
有什么方法可以简单地解决这个问题吗?我有点不知所措。 编辑 我试过制作一个像
type Data struct{
xtoy map[string]interface{} `mapstructure:"xtoy " json:"xtoy "`
atob map[string]interface{} `mapstructure:"atob" json:"atob"`
mton map[string]interface{} `mapstructure:"mton" json:"mton"`
itemdetails[]CustomStruct `mapstructure:"itemdetails" json:"itemdetails"`
}
现在前 3 个工作,但是当我到达 itemdetails 时,我需要访问接口内的字段,但要添加到问题 itemdetails 是一个接口数组。CustomStruct 是一个嵌套结构,遵循 json 结构
解决方案
要处理这种嵌套的 json 对象,理想情况下,您应该将它们分解为单个对象而不是接口,因为它们更安全
为简单起见,创建自己的结构,如下所示:
type Xtoy struct {
Num1 int `json:"1"`
Num2 int `json:"2"`
Num3 int `json:"3"`
}
type Atob struct {
Num1 int `json:"1"`
Num2 int `json:"2"`
Num3 int `json:"3"`
}
type Mton struct {
Num1 int `json:"1"`
Num2 int `json:"2"`
Num3 int `json:"3"`
}
type Item struct {
ID int `json:"id"`
Name string `json:"name"`
}
type Product struct {
ID int `json:"id"`
Type string `json:"type"`
}
type Num1 struct {
Product Product `json:"product"`
}
type Details struct {
Num1 Num1 `json:"1"`
}
type Details struct {
Details Details `json:"details"`
}
type Num1 struct {
Item Item `json:"item"`
Details Details `json:"details"`
}
type Itemdetails struct {
Num1 Num1 `json:"1"`
}
type Data struct {
Xtoy Xtoy `json:"xtoy"`
Atob Atob `json:"atob"`
Mton Mton `json:"mton"`
Itemdetails Itemdetails `json:"itemdetails"`
}
type Finale struct {
Data Data `json:"data"`
Date string `json:"Date"`
}
推荐阅读
- python - 使用 conda 安装 face_recognition 时遇到问题
- amazon-web-services - 在新的 EC2 实例上自动附加和挂载 EBS 卷
- excel - 基于switch的excel图表
- python - 在 Python 中重构字典的层次结构?
- sql - 将行的值填充到按日期分区的新列中
- python - 如何在 Python 中正确地进行单元测试
- python - 将结果响应从另一个应用程序代码保存到您的应用程序
- python - 如何将文件 URL 转换为二进制数据(多部分/表单数据)以进行上传
- jquery - 从另一个页面向元素添加类名
- flutter - Flutter 导航到现有页面