Go语言解析多层嵌套同结构JSON的问题求助
解决Go语言解析多层嵌套同结构JSON的问题
我来帮你搞定这个多层嵌套JSON的解析问题!首先看你给的API响应,这里的核心是递归结构——每个podKategoria节点里可能包含同类型的子节点(要么是单个podKategoria,要么是podKategorie数组)。咱们一步步来解决:
1. 定义递归的Go结构体
首先需要定义一个能匹配JSON结构的递归结构体,因为每个节点的结构和它的子节点完全一致。这里要注意两个点:
- 用指针类型定义单个子节点
PodKategoria,避免字段不存在时解析出空结构体 - 给可选字段加上
omitempty标签,适配JSON中某些字段缺失的情况
package main import ( "encoding/json" "fmt" ) // PodKategoria 匹配API返回的嵌套结构 type PodKategoria struct { PodKategoriaTyp string `json:"podKategoriaTyp"` NazwaWyswietlana string `json:"nazwaWyswietlana,omitempty"` PodKategorie []PodKategoria `json:"podKategorie,omitempty"` PodKategoria *PodKategoria `json:"podKategoria,omitempty"` }
2. 解析JSON示例代码
接下来就可以用标准库的encoding/json来解析你的API响应了,示例代码如下:
func main() { // 你的API返回JSON字符串 apiResponse := `{ "podKategoria": { "podKategoriaTyp": "area", "nazwaWyswietlana": "Area", "podKategorie": [ { "podKategoriaTyp": "somethingelse", "nazwaWyswietlana": "Display something else", "podKategoria": { "podKategoriaTyp": "and other thing", "nazwaWyswietlana": "Display and other thing", "podKategorie": [ { "podKategoriaTyp": "sub nd..." } ] } } ] } }` // 定义根结构,因为API返回的外层是一个包含podKategoria的对象 var root struct { PodKategoria PodKategoria `json:"podKategoria"` } // 解析JSON err := json.Unmarshal([]byte(apiResponse), &root) if err != nil { fmt.Printf("解析失败: %v\n", err) return } // 打印根节点信息验证 fmt.Printf("根节点类型: %s, 显示名称: %s\n", root.PodKategoria.PodKategoriaTyp, root.PodKategoria.NazwaWyswietlana) }
3. 递归遍历所有嵌套节点
因为是多层嵌套结构,如果你需要遍历所有节点处理数据,可以写一个递归函数:
// TraversePodKategorie 递归遍历所有PodKategoria节点 func TraversePodKategorie(p PodKategoria) { // 处理当前节点 fmt.Printf("- 类型: %s, 显示名称: %s\n", p.PodKategoriaTyp, p.NazwaWyswietlana) // 遍历子节点数组 for _, sub := range p.PodKategorie { TraversePodKategorie(sub) } // 处理单个子节点 if p.PodKategoria != nil { TraversePodKategorie(*p.PodKategoria) } } // 在main函数里调用: // TraversePodKategorie(root.PodKategoria)
运行这段代码后,就能依次打印出所有嵌套节点的信息啦!
内容的提问来源于stack exchange,提问作者erPe
相关产品推荐
相关产品推荐

