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

如何通过键名获取JSON对象中的Id值(不受位置变化影响)

如何在嵌套JSON中按键名查找值

当JSON结构可能变化,但目标键名(如Id)固定时,固定路径的取值方式会失效,这时可以通过递归遍历整个JSON结构来查找所有匹配键名的值。

实现思路

遍历JSON中的每一项:

  • 如果当前是字典(对象),检查是否包含目标键,若包含则记录对应值;同时递归遍历字典的所有值。
  • 如果当前是列表(数组),递归遍历列表中的每一个元素。

代码示例

查找所有匹配的Id值

def find_all_ids(data, target_key='Id'):
    result = []
    if isinstance(data, dict):
        # 检查当前字典是否有目标键
        if target_key in data:
            result.append(data[target_key])
        # 递归遍历字典的所有值
        for value in data.values():
            result.extend(find_all_ids(value, target_key))
    elif isinstance(data, list):
        # 递归遍历列表中的每个元素
        for item in data:
            result.extend(find_all_ids(item, target_key))
    return result

# 示例JSON数据
json_data = {
    "Steps": [
        {
            "Id": "UPSKGVQL6Y",
            "Config": {
                "Properties": {},
                "Args": []
            },
            "Status": {}
        }
    ],
    "ResponseMetadata": {}
}

# 调用函数获取所有Id
all_ids = find_all_ids(json_data)
print(all_ids)  # 输出: ['UPSKGVQL6Y']

只查找第一个匹配的Id值

如果只需要第一个找到的Id,可以修改函数提前返回:

def find_first_id(data, target_key='Id'):
    if isinstance(data, dict):
        if target_key in data:
            return data[target_key]
        for value in data.values():
            result = find_first_id(value, target_key)
            if result is not None:
                return result
    elif isinstance(data, list):
        for item in data:
            result = find_first_id(item, target_key)
            if result is not None:
                return result
    return None

# 调用函数获取第一个Id
first_id = find_first_id(json_data)
print(first_id)  # 输出: UPSKGVQL6Y

说明

  • 这两种方法都不依赖JSON的固定结构,无论Id出现在嵌套的对象还是数组中,都能被找到。
  • 如果JSON中存在多个Id键,find_all_ids会返回所有对应值的列表,find_first_id会返回第一个遇到的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:15:29