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

Go语言不依赖第三方库统计JSON数组元素数量

在Go中无第三方库统计指定JSON数组的元素数量

对于结构庞大且不想提前定义结构体的JSON数据,直接用Go标准库encoding/json的空接口解析即可实现需求,核心思路是逐层通过类型断言定位到目标数组,再获取其长度。

实现代码

package main

import (
	"encoding/json"
	"fmt"
	"log"
)

func main() {
	jsonStr := `{
    "someObjects": [
    {
        "value1": "something here"
    },
    {
        "value1": "something else"
    }
    ]
}`

	// 将JSON字符串解析到空接口
	var data interface{}
	err := json.Unmarshal([]byte(jsonStr), &data)
	if err != nil {
		log.Fatalf("JSON解析失败: %v", err)
	}

	// 断言根节点为JSON对象类型
	dataMap, ok := data.(map[string]interface{})
	if !ok {
		log.Fatal("JSON根节点不是对象类型")
	}

	// 获取目标字段对应的值
	arrayVal, ok := dataMap["someObjects"]
	if !ok {
		log.Fatal("未找到someObjects字段")
	}

	// 断言目标值为JSON数组类型并统计长度
	array, ok := arrayVal.([]interface{})
	if !ok {
		log.Fatal("someObjects字段不是数组类型")
	}

	fmt.Printf("someObjects数组内的对象数量: %d\n", len(array))
}

关键逻辑说明

  • 空接口适配:用interface{}接收整个JSON结构,无需提前定义匹配的结构体,完美适配结构庞大或多变的JSON数据。
  • 逐层类型断言:先将根节点断言为map[string]interface{}(对应JSON对象),再取出someObjects字段的值,最后将其断言为[]interface{}(对应JSON数组)。
  • 合法性检查:每一步断言都做有效性校验,避免类型不匹配引发的panic,同时捕获JSON解析失败的异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:57:10