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

Python如何向函数传递JSON对象实现多层嵌套字段安全取值

报错原因
  • 你写的传参["DataChangedEntry"]["CurrentValue"]["RefId"]["Value"]本身就是非法写法:这行代码会先生成一个只有"DataChangedEntry"一个元素的列表,紧接着用字符串"CurrentValue"去索引列表。Python列表仅支持整数、切片作为索引,所以会直接抛出你看到的TypeError,这个错误发生在函数调用阶段,根本没有进入你定义的函数逻辑。
  • 你写的my_function仅支持取单层key的值,没有逐层遍历嵌套路径的逻辑,本身也无法满足多层嵌套JSON的取值需求。
正确实现方式

传参规则

把嵌套结构从最外层到目标字段的所有key,按顺序放在同一个列表里作为路径参数传入,比如示例中目标字段的路径参数应为["DataChangedEntry", "CurrentValue", "RefId", "Value"]。

函数代码

遍历路径列表逐层深入取值,过程中捕获嵌套取值的常见异常,路径不存在时返回预设默认值即可,不要用裸except避免吞掉程序本身的其他错误:

import logging

def get_nested_value(json_obj, key_path, default=None):
    current_node = json_obj
    try:
        for key in key_path:
            current_node = current_node[key]
        return current_node
    except (KeyError, TypeError, IndexError):
        logging.exception("嵌套字段取值失败,路径:%s", key_path)
        return default

调用示例

# 测试用JSON结构
my_json = {
    "DataChangedEntry": {
        "CurrentValue": {
            "RefId": {
                "Value": "aaaaaaa"
            }
        }
    }
}

# 正常取值
target_value = get_nested_value(my_json, ["DataChangedEntry", "CurrentValue", "RefId", "Value"])
print(target_value)  # 输出: aaaaaaa

# 路径错误时不会中断程序,返回默认值None
error_test = get_nested_value(my_json, ["DataChangedEntry", "NotExistKey", "RefId"])
print(error_test)  # 输出: None

捕获的三类异常对应常见取值错误场景:KeyError为字典key不存在;TypeError为当前节点不是支持key/索引取值的字典/列表类型(比如遍历到数字、字符串值还尝试往下取子节点);IndexError为列表类型节点的索引超出范围,覆盖了绝大多数嵌套结构取值的异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:51:19