分享
golang 通过struct 构建多层嵌套的json数据
会飞一下 · · 8258 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
此例用 微信的 设置菜单为例 底部三个菜单, 每个菜单里三个子菜单
定义结构体
type Btn struct{
Name string `json:"name"`
Type string `json:"type"`
Url string `json:"url"`
Sub_button []Btn `json:"sub_button,omitempty"` //值为空时 直接忽略
}
type menu struct{
Button []Btn `json:"button"`
}
结构体赋值
jsonData := Menu{
Button:[]Btn{
{Name:"home",Type:"view",Url:"https://www.qq.com/auth"},
{Name:"tool",Sub_button:[]Btn{
{Name:"a1",Type:"view",Url:"https://www.qq.com/a1"},
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
{Name:"a3",Type:"view",Url:"https://www.qq.com/a3"},
}},
{Name:"other",Sub_button:[]Btn{
{Name:"a1",Type:"view",Url:"https://www.qq.com/a1"},
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
{Name:"a3",Type:"view",Url:"https://www.qq.com/a3"},
}},
},
}
结构体转json
str,err := json.Marshal(jsonData)
if err != nil{
panic(err)
}
fmt.println(string(str))
golang 模拟请求时, 传的参数是 map[string]interface{} 的类型, 所以这里需要将json数据处理成这种格式
param := map[string]interface{}{
"button":[]Btn{
{Name:"home",Type:"view",Url:"https://www.qq.com/auth"},
{Name:"tool",Sub_button:[]Btn{
{Name:"a1",Type:"view",Url:"https://www.qq.com/1"},
{Name:"a1",Type:"view",Url:"https://www.qq.com/1"},
{Name:"a1",Type:"view",Url:"https://www.qq.com/1"},
}},
{Name:"other",Sub_button:[]Btn{
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
}},
},
}
*结构体命名需要大写 才会导出到json串中, 可以通过 struct tag 设置导出的别名, 可以通过 omitempty 忽略值为空的字段
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信8258 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
此例用 微信的 设置菜单为例 底部三个菜单, 每个菜单里三个子菜单
定义结构体
type Btn struct{
Name string `json:"name"`
Type string `json:"type"`
Url string `json:"url"`
Sub_button []Btn `json:"sub_button,omitempty"` //值为空时 直接忽略
}
type menu struct{
Button []Btn `json:"button"`
}
结构体赋值
jsonData := Menu{
Button:[]Btn{
{Name:"home",Type:"view",Url:"https://www.qq.com/auth"},
{Name:"tool",Sub_button:[]Btn{
{Name:"a1",Type:"view",Url:"https://www.qq.com/a1"},
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
{Name:"a3",Type:"view",Url:"https://www.qq.com/a3"},
}},
{Name:"other",Sub_button:[]Btn{
{Name:"a1",Type:"view",Url:"https://www.qq.com/a1"},
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
{Name:"a3",Type:"view",Url:"https://www.qq.com/a3"},
}},
},
}
结构体转json
str,err := json.Marshal(jsonData)
if err != nil{
panic(err)
}
fmt.println(string(str))
golang 模拟请求时, 传的参数是 map[string]interface{} 的类型, 所以这里需要将json数据处理成这种格式
param := map[string]interface{}{
"button":[]Btn{
{Name:"home",Type:"view",Url:"https://www.qq.com/auth"},
{Name:"tool",Sub_button:[]Btn{
{Name:"a1",Type:"view",Url:"https://www.qq.com/1"},
{Name:"a1",Type:"view",Url:"https://www.qq.com/1"},
{Name:"a1",Type:"view",Url:"https://www.qq.com/1"},
}},
{Name:"other",Sub_button:[]Btn{
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
{Name:"a2",Type:"view",Url:"https://www.qq.com/a2"},
}},
},
}