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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:11:31