You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:56:00