如何通过键名获取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
相关产品推荐
相关产品推荐

