如何正确遍历键名动态的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
相关产品推荐
相关产品推荐

