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
相关产品推荐
相关产品推荐

