如何在JSON列表中追加值?解决服务器重启后数据覆盖问题
解决JSON文件列表追加覆盖问题
你的核心问题是没有正确将新值追加到已读取的JSON数据列表中,且代码逻辑存在多处疏漏,导致每次写入都会覆盖原有内容。以下是问题分析和修正方案:
原代码的问题
- 读取JSON后,仅打印数据但未将新获取的
heartrate和dt_string追加到对应列表 - 异常分支初始化的
data用[None]占位,未直接写入首次获取的有效值 - 最终写入文件时,未确保
data是更新后的完整数据
修正后的代码
import json def perform_all(): # 模拟返回心率和时间,实际替换为你的业务逻辑 return 73.44, "01/22/2023 12:00:00" # 初始化默认数据结构 data = { "heart_rate": [], "Experiment_time": [] } # 读取已有文件(如果存在) try: with open('Accounts.json', 'r') as fp: data = json.load(fp) except FileNotFoundError: print("文件不存在,将创建新文件") except json.JSONDecodeError: print("文件格式错误,将重新初始化数据") # 获取新值并追加到对应列表 heartrate, dt_string = perform_all() data["heart_rate"].append(heartrate) data["Experiment_time"].append(dt_string) # 写入更新后的数据 with open('Accounts.json', 'w') as fp: json.dump(data, fp, indent=4)
关键逻辑说明
- 先读取再更新:优先读取已有JSON文件的数据,确保原有列表内容不丢失
- 细化异常处理:区分文件不存在和JSON格式错误的场景,避免捕获所有异常导致隐藏问题
- 直接追加列表:将新获取的心率和时间直接追加到对应key的列表中,而非重新创建空列表
- 统一写入逻辑:无论文件是否存在,最后都将更新后的完整
data写入文件,保证数据持久化
内容的提问来源于stack exchange,提问作者Iamgroot
相关产品推荐
相关产品推荐

