如何用Python每次运行代码时向JSON文件追加有效数据?
问题分析与解决方法
原代码存在的问题
- 语法错误:
for i in arr_of_user_id语句末尾缺少冒号 - 变量未定义:
list_of_user_id未声明,与实际要追加的单个字典条目不符 - 无效的列表推导:
[{'owner_id': id} for id in zip(id)]逻辑混乱,误用内置函数id,无法生成预期的字典列表 - 追加逻辑错误:循环时直接追加整个数组,而非单个用户条目
- 错误使用
a+模式:直接追加JSON字符串会导致文件出现[{}][{}]这类非法结构,因为JSON要求整个文件是单一合法的JSON对象/数组
正确实现方案
要实现向JSON文件安全追加数据,必须遵循读取-修改-覆盖写入的流程,同时处理文件不存在的情况,还可加入去重逻辑避免重复数据:
import json arr_of_user_id = [12, 11, 34, 19] # 格式化要添加的用户数据为字典列表 new_user_entries = [{"id": uid} for uid in arr_of_user_id] # 读取现有JSON数据,处理文件不存在的场景 try: with open('filed.json', 'r', encoding='utf-8') as f: existing_data = json.load(f) except FileNotFoundError: # 文件不存在时初始化空列表 existing_data = [] # 去重:避免重复添加相同id的条目 existing_ids = {entry['id'] for entry in existing_data} filtered_entries = [entry for entry in new_user_entries if entry['id'] not in existing_ids] # 合并数据并写入文件 existing_data.extend(filtered_entries) with open('filed.json', 'w', encoding='utf-8') as f: json.dump(existing_data, f, indent=4) # indent参数让JSON格式更易读
关键说明
- 不能用
a+模式直接写入:JSON语法要求整个文件是单一的合法结构,直接追加会破坏结构,导致无法解析。必须读取全部内容修改后,用w模式覆盖写入,保证文件始终是合法的JSON。 - 去重逻辑可选:如果不需要避免重复数据,可以去掉
existing_ids和filtered_entries相关代码,直接执行existing_data.extend(new_user_entries)。
内容的提问来源于stack exchange,提问作者boolistrue
相关产品推荐
相关产品推荐

