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

如何正确遍历键名动态的JSON数组并提取值?

嘿,我完全懂你碰到的这个麻烦——JSON里的键名不固定,没法提前写死模型类来映射,反序列化的时候肯定卡壳了对吧?别慌,咱们换个动态处理的思路就行,不用绑定固定键名!

核心思路:用动态键值对集合替代固定模型

不管你用哪种编程语言,核心都是放弃固定实体类,改用**字典(键值对集合)**或者专门的动态JSON处理类型来解析,这样不管键名怎么变,都能灵活遍历或取值。

举几个主流语言的实现例子

C# 方案

可以用Json.NET(Newtonsoft.Json)的JArray或者直接反序列化成List<Dictionary<string, string>>:

方式1:用JArray遍历所有键值对

using Newtonsoft.Json.Linq;
using System;

string json = "[{ \"ID1\":\"1\", \"ID2\":\"2\", \"ID3\":\"3\", \"ID4\":\"4\" }, { \"ID1\":\"5\", \"ID2\":\"6\", \"ID3\":\"7\", \"ID4\":\"8\" }]";

// 解析成JArray动态类型
JArray jsonArray = JArray.Parse(json);

foreach (JObject item in jsonArray)
{
    // 遍历当前对象的所有键值对
    foreach (var property in item.Properties())
    {
        string key = property.Name;
        string value = property.Value.ToString();
        Console.WriteLine($"键: {key}, 值: {value}");
    }
    Console.WriteLine("---");
}

方式2:反序列化成字典列表

using Newtonsoft.Json;
using System.Collections.Generic;
using System;

string json = "[{ \"ID1\":\"1\", \"ID2\":\"2\" }, { \"ID1\":\"5\", \"ID2\":\"6\" }]";

// 直接转成List<Dictionary<string, string>>,每个元素都是键值对字典
List<Dictionary<string, string>> dataList = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(json);

foreach (var dict in dataList)
{
    foreach (var kvp in dict)
    {
        Console.WriteLine($"键: {kvp.Key}, 值: {kvp.Value}");
    }
    Console.WriteLine("---");
}

Python 方案

Python自带的json模块直接就能把JSON转成列表嵌套字典,处理起来超省心:

import json

json_str = '[{ "ID1":"1", "ID2":"2", "ID3":"3", "ID4":"4" }, { "ID1":"5", "ID2":"6", "ID3":"7", "ID4":"8" }]'

# 解析成列表,每个元素是动态字典
data_list = json.loads(json_str)

for item in data_list:
    # 遍历字典的所有键值对
    for key, value in item.items():
        print(f"键: {key}, 值: {value}")
    print("---")

这种方式不管JSON里的键名是多是少、怎么变化,都能轻松遍历获取到所有键值对,完全不用受固定模型的限制~

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

相关产品推荐
方舟 Agent Plan

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

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