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

如何用Golang解析嵌套JSON并获取指定result_rows数据?

解决Go中嵌套JSON的result_rows数据提取问题

你当前代码无法访问result_rows的核心问题是结构体定义不完整:既没有声明对应字段,也没通过json标签和JSON中的小写字段做映射,同时result_rows里的元素是混合类型数组,需要针对性处理。

修改后的完整代码

package main

import (
	"encoding/json"
	"fmt"
)

type PoliticsJson struct {
	Status string
	Output []struct {
		Name    string
		Results []struct {
			Name           string          `json:"name"`
			Result_Headers []string        `json:"result_headers"`
			ResultRows     [][]interface{} `json:"result_rows"` // 用interface{}接收混合类型数组
		} `json:"Results"`
	} `json:"output"`
}

func main() {
	s := `{
  "status": "pass",
  "output": [
    {
      "Name": "example",
      "ExecutionTime": "2021-08-22T10:23:10.775986761Z",
      "Passed": false,
      "Results": [
        {
          "name": "name1",
          "description": "desc1",
          "result_headers": [
            "name",
            "types",
            "times"
          ],
          "result_rows": [
            [
              "insta-a",
              {
                "Elements": [
                  "x-aaaa",
                  "x-bbbb"
                ],
                "Dimensions": [
                  {
                    "Length": 2,
                    "LowerBound": 1
                  }
                ],
                "Status": 2
              },
              {
                "Elements": [
                  {
                    "Time": "2021-07-28T20:01:47Z",
                    "Status": 2,
                    "InfinityModifier": 0
                  },
                  {
                    "Time": "2021-07-28T19:24:33Z",
                    "Status": 2,
                    "InfinityModifier": 0
                  }
                ],
                "Dimensions": [
                  {
                    "Length": 2,
                    "LowerBound": 1
                  }
                ],
                "Status": 2
              }
            ],
            [
              "insta-b",
              {
                "Elements": [
                  "x-eeee",
                  "x-ffff"
                ],
                "Dimensions": [
                  {
                    "Length": 2,
                    "LowerBound": 1
                  }
                ],
                "Status": 2
              },
              {
                "Elements": [
                  {
                    "Time": "2021-07-18T06:18:15Z",
                    "Status": 2,
                    "InfinityModifier": 0
                  },
                  {
                    "Time": "2021-08-17T12:20:33Z",
                    "Status": 2,
                    "InfinityModifier": 0
                  }
                ],
                "Dimensions": [
                  {
                    "Length": 2,
                    "LowerBound": 1
                  }
                ],
                "Status": 2
              }
            ],
            [
              "insta-c",
              {
                "Elements": [
                  "x-tttt",
                  "x-yyyy"
                ],
                "Dimensions": [
                  {
                    "Length": 2,
                    "LowerBound": 1
                  }
                ],
                "Status": 2
              },
              {
                "Elements": [
                  {
                    "Time": "2021-08-10T07:57:32Z",
                    "Status": 2,
                    "InfinityModifier": 0
                  },
                  {
                    "Time": "2021-08-10T07:56:45Z",
                    "Status": 2,
                    "InfinityModifier": 0
                  }
                ],
                "Dimensions": [
                  {
                    "Length": 2,
                    "LowerBound": 1
                  }
                ],
                "Status": 2
              }
            ]
          ],
          "type": "manual",
          "check_passed": false
        }
      ],
      "Error": "",
      "Loaded": null
    }
  ]
}`

	var p PoliticsJson
	err := json.Unmarshal([]byte(s), &p)
	if err != nil {
		panic(err)
	}

	// 提取首个Results元素的result_rows数据
	firstResult := p.Output[0].Results[0]
	for _, row := range firstResult.ResultRows {
		// 提取insta名称
		instaName, _ := row[0].(string)
		// 提取Elements数组
		elementMap, _ := row[1].(map[string]interface{})
		elements, _ := elementMap["Elements"].([]interface{})
		// 格式化输出目标内容
		fmt.Printf("%s %s,%s\n", instaName, elements[0], elements[1])
	}
}

关键修改说明

  1. 结构体字段与标签:

    • 新增ResultRows字段并添加json:"result_rows"标签,让Go能正确解析JSON中的小写字段;
    • 用[][]interface{}定义ResultRows,适配result_rows的混合类型数组结构。
  2. 数据提取逻辑:

    • 遍历result_rows的每一行,通过类型断言将interface{}转换为字符串、map类型;
    • 提取每行第一个元素作为insta名称,第二个元素中的Elements数组作为目标值。

运行代码后会输出你需要的内容:

insta-a x-aaaa,x-bbbb
insta-b x-eeee,x-ffff
insta-c x-tttt,x-yyyy

内容的提问来源于stack exchange,提问作者user1234845

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:40:16