如何使用Python在JSON指定位置添加新键值对
解决JSON字典指定位置插入键值对的问题
要实现把location键值对插入到Name之后的需求,核心是重新构造字典来控制键的顺序(Python 3.7及以上版本的普通字典默认保持插入顺序),具体步骤如下:
完整代码实现
import json filename = 'test.json' # 读取JSON文件 with open(filename, "r") as jsonFile: data = json.load(jsonFile) # 取出数组中的第一个字典 original_item = data[0] # 重新构造字典:先保留Name,再添加location,最后加入剩余的键值对 new_item = { 'Name': original_item['Name'], 'location': 'USA', **{key: value for key, value in original_item.items() if key != 'Name'} } # 替换原数组中的元素 data[0] = new_item # 将修改后的数据写回JSON文件 with open(filename, "w") as jsonFile: json.dump(data, jsonFile, indent=2) print(data)
代码说明
- 读取与解析:用
with语句安全读取JSON文件,避免手动关闭文件的繁琐。 - 重构字典:
- 先显式写入
Name键值对; - 紧接着插入
location: "USA"; - 用字典推导式把原字典中除
Name外的其他键值对追加进来,保证剩下的键顺序和原数据一致。
- 先显式写入
- 写回文件:用
json.dump时指定indent=2,让输出的JSON格式和示例一致,更易读。
验证输出
执行代码后,JSON文件的内容会变为:
[ { "Name": "AMAZON", "location": "USA", "Type": "Web", "eventTimeEpoch": 1611667194 } ]
兼容低版本Python(3.6及以下)
如果你的Python版本低于3.7,普通字典不保证顺序,需要用collections.OrderedDict来实现:
from collections import OrderedDict import json filename = 'test.json' with open(filename, "r") as jsonFile: data = json.load(jsonFile, object_pairs_hook=OrderedDict) original_item = data[0] new_item = OrderedDict() new_item['Name'] = original_item['Name'] new_item['location'] = 'USA' # 加入剩余键值对 for key, value in original_item.items(): if key != 'Name': new_item[key] = value data[0] = new_item with open(filename, "w") as jsonFile: json.dump(data, jsonFile, indent=2)
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

