如何在未知JSON Schema时用JsonNode遍历获取所有值?
使用JsonNode遍历JSON对象的所有值(无需指定键名)
问题场景
假设从API获取到如下JSON响应:
{ "message": "Source: ", "incomingUrl": "https://10.1.1/api/echo", "incomingHeadersCount": 21, "apiVersion": "1.0" }
目前使用JsonNode解析时,必须指定键名才能访问对应值:
var parsedJson = JsonNode.Parse(apiResponse.Result); Console.WriteLine(parsedJson["message"]);
希望无需知晓任何键名,直接遍历获取所有值,例如通过类似如下代码实现:
foreach (var item in parsedJson) { Console.WriteLine(item); }
期望输出:"Source: ", "https://10.1.1/api/echo", "21", "1.0"
请问用JsonNode能否实现?
解决方案
可以实现。JsonNode.Parse返回的根节点如果是JSON对象,实际类型是JsonObject,它实现了IEnumerable<KeyValuePair<string, JsonNode?>>接口,只需将根节点转换为JsonObject,然后遍历其Values集合即可获取所有值。
基础实现代码
var parsedJson = JsonNode.Parse(apiResponse.Result); // 先验证根节点类型,避免非JSON对象场景报错 if (parsedJson is JsonObject jsonObj) { foreach (var value in jsonObj.Values) { Console.WriteLine(value); } }
简化遍历写法
如果确认根节点一定是JSON对象,也可以直接转换后遍历:
foreach (var item in ((JsonObject)parsedJson).Values) { Console.WriteLine(item); }
实际输出
运行上述代码后,会输出:
Source: https://10.1.1/api/echo 21 1.0
注意事项
- 务必先判断根节点类型是否为
JsonObject,如果API返回的是JSON数组(JsonArray),需要用对应的遍历方式 JsonNode的值可能为null,若业务需要处理空值,可在遍历过程中添加空值检查
内容的提问来源于stack exchange,提问作者AlbatrossCafe
相关产品推荐
相关产品推荐

