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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:45:38