Python/.Net是否有读取复杂嵌套对象的跨云通用取值函数?
Python 和 .NET 读取嵌套对象的路径取值实现方案
Python 实现
Python标准库中没有直接支持a/b/c这种路径格式读取嵌套字典的函数,但可以自己实现一个轻量工具函数,完全适配各类云厂商返回的嵌套JSON结构(转成字典后均可处理)。
代码示例
def get_nested_value(obj, path, default=None): keys = path.split('/') current = obj try: for key in keys: current = current[key] return current except (KeyError, TypeError): return default # 测试用例 obj1 = {"a":{"b":{"c":"d"}}} print(get_nested_value(obj1, "a/b/c")) # 输出: d obj2 = {"x":{"y":{"z":"a"}}} print(get_nested_value(obj2, "x/y/z")) # 输出: a # 处理不存在的路径,返回默认值 print(get_nested_value(obj1, "a/b/d", default="not found")) # 输出: not found
这个函数通过拆分路径键逐层遍历嵌套对象,同时捕获KeyError(键不存在)和TypeError(当前层级不可索引),返回默认值避免程序崩溃,适配绝大多数云厂商返回的结构化数据。
.NET 实现
.NET框架和标准库同样没有直接提供此类路径取值的API,但可以基于常用JSON处理库实现,兼容各类云厂商返回的JObject或JSON元素结构。
基于 Newtonsoft.Json 的实现
using Newtonsoft.Json.Linq; public static object GetNestedValue(JObject obj, string path, object defaultValue = null) { var keys = path.Split('/'); JToken current = obj; foreach (var key in keys) { current = current[key]; if (current == null) return defaultValue; } return current.ToObject<object>(); } // 测试用例 var obj1 = JObject.Parse(@"{""a"":{""b"":{""c"":""d""}}}"); Console.WriteLine(GetNestedValue(obj1, "a/b/c")); // 输出: d var obj2 = JObject.Parse(@"{""x"":{""y"":{""z"":""a""}}}"); Console.WriteLine(GetNestedValue(obj2, "x/y/z")); // 输出: a
基于 System.Text.Json 的实现
using System.Text.Json; public static object GetNestedValue(JsonElement obj, string path, object defaultValue = null) { var keys = path.Split('/'); JsonElement current = obj; foreach (var key in keys) { if (!current.TryGetProperty(key, out current)) return defaultValue; } return current.ValueKind switch { JsonValueKind.String => current.GetString(), JsonValueKind.Number => current.GetInt64(), JsonValueKind.True => true, JsonValueKind.False => false, _ => defaultValue }; } // 测试用例 var jsonStr = @"{""a"":{""b"":{""c"":""d""}}}"; var doc = JsonDocument.Parse(jsonStr); Console.WriteLine(GetNestedValue(doc.RootElement, "a/b/c")); // 输出: d
这两种实现都能处理云厂商返回的JSON结构,通过路径拆分逐层取值,同时处理路径不存在的情况返回默认值,适配不同的.NET JSON处理场景。
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

