Python如何实现嵌套JSON扁平化?将place字段键值合并到外层字典
Python实现place嵌套字段扁平化合并的方案
你现有代码的逻辑偏差
- 你通过
place_data = json_data[i]['place']取到的place_data,本身就是嵌套在place字段下的地址字典,这个字典内部只有city、district这类地址键,根本不存在名为place的键,你写的del place_data['place']执行时会直接抛出KeyError。 - 即使成功取出了place对应的嵌套字典,没有把字典内的键值对合并到外层结构,也完全达不到扁平化的效果。
核心实现逻辑
整个流程不需要通过下标循环遍历,直接迭代列表内的每一个字典项即可,操作分3步:
- 从每一项中取出
place对应的嵌套字典,同时移除外层原有的place专属键 - 把嵌套字典内的所有键值对直接合并到外层字典上
- 外层的原有字段(id、name、access)会自动保留,无需额外处理
完整可运行代码示例:
import json # 已解析完成的原始JSON数据 json_data = [ { "id": "101", "name": "User1", "place": { "city": "City1", "district": "District1", "state": "State1", "country": "Country1" }, "access": [{"status": "available"}] } ] for item in json_data: # pop一步完成:取出place对应的值、同时从外层删除place键,设置默认空值兼容无place字段的项 place_detail = item.pop('place', {}) # 把place内的所有键值对合并到外层字典 item.update(place_detail) # 验证输出结果 print(json.dumps(json_data, indent=2, ensure_ascii=False))
特殊场景适配
如果你的数据中存在外层字典和place内部键名重复的情况,默认的update方法会用place内的值覆盖外层原有值。如果需要保留外层原有键、仅追加外层不存在的键,可以把合并逻辑改成逐键判断:
for item in json_data: place_detail = item.pop('place', {}) for key, value in place_detail.items(): # 仅当外层没有当前键时才追加,避免覆盖原有数据 if key not in item: item[key] = value
内容的提问来源于stack exchange,提问作者Thra
相关产品推荐
相关产品推荐

