如何用Python将嵌套JSON转换为指定键值对格式?
JSON格式转换问题修复
原始JSON数据
{"Africa": { "invitee_event_type_page": { "Total Events": "194" }, "invitee_meeting_cancelled": { "Total Events": "9" } }, "Asia": { "invitee_event_type_page": { "Total Events": "127" }, "invitee_meeting_scheduled": { "Total Events": "16" } } }
目标输出格式
output = [{"Asia - invitee_event_type_page": 127, "Asia - invitee_meeting_scheduled":16, "Africa - invitee_event_type_page": 194,"Africa - invitee_meeting_cancelled":9}]
你的代码问题分析
当前代码存在三个核心问题:
- 仅处理了
Africa区域,完全遗漏Asia的数据 - 错误地将列表
output与字符串key直接拼接,触发TypeError(列表只能和列表拼接,无法直接加字符串) - 混淆了列表与字典的使用逻辑:目标结构是列表包裹一个字典,但你试图直接往列表中塞入字符串和数值
修复后的完整代码
import json # 读取JSON文件内容 with open("ga2.json", "r") as f: data = json.load(f) # 初始化空字典存储最终键值对 result_dict = {} # 遍历所有大洲数据 for continent, events in data.items(): # 遍历当前大洲下的所有事件类型 for event_type, event_detail in events.items(): # 拼接键名,将字符串类型的事件数转为整数 key = f"{continent} - {event_type}" result_dict[key] = int(event_detail["Total Events"]) # 将字典包装为列表,匹配目标格式 output = [result_dict] print(output)
代码说明
- 移除无用的
re模块,仅保留必需的json模块 - 通过两层循环遍历所有大洲和事件类型,确保不遗漏任何数据
- 使用f-string简洁拼接键名,同时将字符串类型的事件数转为整数,匹配目标输出的数值类型
- 最终将构建完成的字典放入列表,完全符合你需要的输出结构
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

