Python3如何遍历嵌套JSON并打印所有name字段值?
遍历嵌套JSON中所有name字段的解决方法
问题描述
我已将一段嵌套JSON数据赋值给变量mydict,目前可通过指定索引打印单个name字段的值,但不清楚如何遍历所有嵌套的name字段并仅打印这些值。
相关JSON数据
{ "data": { "endpoints": { "edges": [ { "node": { "name": "test1.net", "ipAddress": "1.2.3.4" } }, { "node": { "name": "test2.net", "ipAddress": "4.3.2.1" } }, { "node": { "name": "test3.net", "ipAddress": "0.0.0.0" } } ] } } }
当前打印单个值的代码
print("Dictionary contains: ",mydict['data']['endpoints']['edges'][1]['node']['name'])
解决方案
方法一:针对固定结构的直接遍历
你的JSON结构固定,name字段都在edges列表的每个node对象中,直接遍历edges即可:
# 获取edges列表 edges_list = mydict['data']['endpoints']['edges'] # 遍历每个元素,提取name for edge in edges_list: print(edge['node']['name'])
方法二:用列表推导式批量提取
如果需要先把所有name收集到列表中再处理,可使用列表推导式:
# 批量提取所有name到列表 all_names = [item['node']['name'] for item in mydict['data']['endpoints']['edges']] # 遍历打印 for name in all_names: print(name)
方法三:通用递归遍历(适用于结构不确定的情况)
如果JSON结构可能变化,或存在其他层级的name字段,可通过递归遍历整个字典/列表,找出所有键为name的值:
def extract_all_names(obj): # 处理字典类型 if isinstance(obj, dict): for key, val in obj.items(): if key == 'name': yield val else: # 递归遍历子元素 yield from extract_all_names(val) # 处理列表类型 elif isinstance(obj, list): for item in obj: yield from extract_all_names(item) # 调用函数并打印所有name for name in extract_all_names(mydict): print(name)
内容的提问来源于stack exchange,提问作者axxic3
相关产品推荐
相关产品推荐

