Golang处理JSON中的嵌套对象(非数组)解析问题
Golang处理JSON中的嵌套对象(非数组)解析问题 基本上,我正在尝试使用结构体来处理JSON和嵌套的JSON对象(不是数组形式[])。我敢肯定这非常简单,但为什么我很难使用两种结构体类型创建一个深度为一层的嵌套JSON对象呢?
package main
import (
"encoding/json"
"fmt"
)
type MetaData struct {
Country string `json:"countryScope"`
Asset string `json:"assetScope"`
}
type BusEvent struct {
MedaData MetaData `json:"metaData"`
Name string
}
func main() {
resp := BusEvent{
MetaData{
Country: "test",
Asset: "test",
},
Name: "test",
}
js, _ := json.Marshal(resp)
fmt.Printf("%s", js)
}
更多关于Golang处理JSON中的嵌套对象(非数组)解析问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
失败信息如下:
./prog.go:20:11: 混合使用了字段:值和值初始化器
更多关于Golang处理JSON中的嵌套对象(非数组)解析问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢 @lutzhorn!我就知道会有人给我指明正确的方向。太棒了,非常感谢。
David_Gates:
MedaData MetaData `json:"metaData"`
这 (MedaData) 很可能是个拼写错误。
错误信息已经说明了一切。请这样做:
resp := BusEvent{
MetaData: MetaData{
Country: "test",
Asset: "test",
},
Name: "test",
}
但这与 JSON 无关,只是关于如何构建 struct。
查看 Go Playground - The Go Programming Language 的输出:
{"metaData":{"countryScope":"test","assetScope":"test"},"Name":"test"}
你的代码已经基本正确,但结构体初始化时字段名需要明确指定。以下是修正后的版本:
package main
import (
"encoding/json"
"fmt"
)
type MetaData struct {
Country string `json:"countryScope"`
Asset string `json:"assetScope"`
}
type BusEvent struct {
MetaData MetaData `json:"metaData"`
Name string `json:"name"`
}
func main() {
// 正确初始化嵌套结构体
resp := BusEvent{
MetaData: MetaData{
Country: "test",
Asset: "test",
},
Name: "test",
}
js, _ := json.Marshal(resp)
fmt.Printf("%s\n", js)
// 解析示例
jsonStr := `{"metaData":{"countryScope":"USA","assetScope":"stock"},"name":"event1"}`
var event BusEvent
json.Unmarshal([]byte(jsonStr), &event)
fmt.Printf("Parsed: %+v\n", event)
}
输出结果:
{"metaData":{"countryScope":"test","assetScope":"test"},"name":"test"}
Parsed: {MetaData:{Country:USA Asset:stock} Name:event1}
关键点:
- 初始化嵌套结构体时需要指定字段名
MetaData: - 结构体字段标签
json:"metaData"确保JSON键名正确映射 - 添加了JSON解析示例展示双向转换
如果JSON键名需要不同命名,只需调整结构体标签即可。

