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

Go语言解析JSON变量:如何从嵌套JSON数组中提取指定字符串?

在Go语言中解析嵌套JSON数组并提取指定字符串

嘿,我来帮你搞定这个问题!你的JSON是一个三层嵌套的数组结构,我们可以通过类型断言逐层解析,最终提取出目标字符串"Odio los lunes"。下面是具体的实现步骤和代码示例:

首先,先明确你的JSON结构:

[ [ [ "Odio los lunes", "i hate mondays", null, null, 1 ] ], null, "en" ]

它是一个顶层数组,包含三个元素:第一个元素是一个数组,这个数组里又包含一个数组,目标字符串就在最内层数组的第一个位置。

方法:使用interface{}逐层解析

这种方法适合处理结构不固定或者嵌套复杂的JSON,通过类型断言逐层拆解数组:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// 你的JSON数据
	jsonStr := `[ [ [ "Odio los lunes", "i hate mondays", null, null, 1 ] ], null, "en" ]`

	// 定义一个空的interface{}来接收解析后的数据
	var result interface{}
	err := json.Unmarshal([]byte(jsonStr), &result)
	if err != nil {
		fmt.Printf("JSON解析失败:%v\n", err)
		return
	}

	// 第一层:将顶层断言为[]interface{}(数组)
	topLevel, ok := result.([]interface{})
	if !ok {
		fmt.Println("顶层数据不是数组类型")
		return
	}

	// 第二层:取顶层数组的第一个元素,断言为[]interface{}
	middleLevel, ok := topLevel[0].([]interface{})
	if !ok {
		fmt.Println("第二层数据不是数组类型")
		return
	}

	// 第三层:取第二层数组的第一个元素,断言为[]interface{}
	innerLevel, ok := middleLevel[0].([]interface{})
	if !ok {
		fmt.Println("第三层数据不是数组类型")
		return
	}

	// 提取目标字符串:取第三层数组的第一个元素,断言为string
	target, ok := innerLevel[0].(string)
	if !ok {
		fmt.Println("目标元素不是字符串类型")
		return
	}

	// 输出结果
	fmt.Println("提取到的字符串:", target)
}

代码解释

  1. 解析JSON:用json.Unmarshal把JSON字符串解析到interface{}变量中,Go会自动将JSON数组转换为[]interface{},JSON对象转换为map[string]interface{}。
  2. 逐层断言:因为我们知道JSON的嵌套结构,所以逐层将interface{}断言为数组类型[]interface{},每一步都检查断言是否成功(避免类型不匹配导致panic)。
  3. 提取目标:最后将最内层数组的第一个元素断言为字符串,就得到了你想要的"Odio los lunes"。

如果你的JSON结构是固定的,也可以考虑定义对应的结构体,但这种嵌套数组的结构用结构体反而会更繁琐,所以用interface{}逐层解析是最直接的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:49:41