Python遍历JSON数据时无法访问csevents节点的问题求助
解决JSON遍历中获取
csevents成员的问题 你的问题出在遍历字典时默认只获取键而不是对应的值,导致后续尝试访问['csevents']时出错——毕竟字符串可没有这个属性。下面给你几种实用的解决方案:
方案一:直接修复当前遍历逻辑
针对你提到的"9"节点,你需要遍历它的键值对,而不是只遍历键。修改后的代码如下:
# 假设json_object已经是解析后的Python字典 for key, node in json_object['data']['9'].items(): # 检查当前节点是否包含csevents if 'csevents' in node: # 遍历csevents下的所有成员ID for event_id in node['csevents']: print(event_id)
这段代码会输出:2807、2810,正好是你需要的"9"节点下的csevents成员。
方案二:遍历整个data节点,获取所有层级的csevents成员
如果你的JSON里还有其他层级(比如顶级的csevents包含3601),可以用更通用的方式遍历所有可能的csevents:
all_event_ids = [] # 遍历data下的所有子节点 for data_key, data_value in json_object['data'].items(): # 情况1:当前节点是字典且包含csevents(比如"9"节点里的csevents) if isinstance(data_value, dict) and 'csevents' in data_value: all_event_ids.extend(data_value['csevents'].keys()) # 情况2:当前节点本身就是csevents(比如data下的顶级csevents) elif data_key == 'csevents' and isinstance(data_value, dict): all_event_ids.extend(data_value.keys()) # 输出所有结果 for event_id in all_event_ids: print(event_id)
这段代码会一次性输出2807、2810、3601,覆盖所有你需要的成员ID。
方案三:递归遍历(最通用,适合复杂嵌套结构)
如果你的JSON结构可能有更深的嵌套,递归函数可以自动找到所有层级的csevents,不用手动处理每一层:
def collect_csevent_ids(obj): event_ids = [] if isinstance(obj, dict): # 如果当前字典有csevents,收集它的所有键 if 'csevents' in obj: csevents = obj['csevents'] if isinstance(csevents, dict): event_ids.extend(csevents.keys()) # 递归遍历所有子节点 for value in obj.values(): event_ids.extend(collect_csevent_ids(value)) return event_ids # 调用函数并输出结果 all_ids = collect_csevent_ids(json_object['data']) for event_id in all_ids: print(event_id)
这个方法的优势是不管csevents藏在JSON的哪个位置,都能被找出来,扩展性最强。
内容的提问来源于stack exchange,提问作者Jere
相关产品推荐
相关产品推荐

