Python向现有JSON文件追加字典列表时出现格式异常如何解决
异常原因
- 传入函数的
json_object是未解析的JSON格式字符串,并非Python原生的列表/字典对象:你直接将字符串追加到了从文件加载出的字典列表中,所以最终结果会出现带\n转义符的字符串项,而非预期的字典结构。 - 原代码仅修改了内存中的
json_file变量,没有将更新后的数据序列化写回文件,实际运行后tracker.json不会发生任何变更。 - 额外注意:你待追加的内容是列表结构,如果直接用
append会把整个列表当作单个元素存入原列表,要合并列表元素需要用extend方法。
修复方案
- 调用函数前先将待追加的JSON字符串解析为Python对象,也可以在函数内部增加兼容逻辑自动处理字符串入参。
- 补充数据写回文件的逻辑,写入前重置文件指针到开头,写入后截断文件避免旧内容残留。
修复后的参考代码:
import json def write_records_to_json(json_object): # 兼容字符串入参,自动解析为Python对象 if isinstance(json_object, str): json_object = json.loads(json_object) with open("tracker.json", "r+", encoding="utf-8") as f: # 加载现有JSON内容 json_file = json.load(f) # 区分列表和单个元素处理 if isinstance(json_object, list): json_file.extend(json_object) else: json_file.append(json_object) # 重置文件指针到开头 f.seek(0) # 写入新内容,indent参数控制格式化输出提升可读性 json.dump(json_file, f, ensure_ascii=False, indent=4) # 截断删除旧文件残留内容 f.truncate()
调用示例:
# 待追加的JSON字符串 to_add = ''' [ { "file": "dnc_complaint_numbers_2021-12-03.csv", "date": "2021-12-03" } ] ''' write_records_to_json(to_add)
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

