Python使用json.dump写入JSON文件出现多余方括号如何解决
问题根因
格式异常由两处写法错误共同导致:
- 列表初始化位置错误:处理单条采集数据时,每次都会重新创建空的
person_info列表,追加单条数据后列表始终只包含1个元素 - 文件操作逻辑错误:使用追加模式
'a'打开文件,每次将仅含1条数据的独立JSON数组直接拼接在文件末尾,多次写入后文件内会出现多个并排的根数组结构,违反JSON语法规范。
推荐修复方案(全量采集后写入,适配绝大多数场景)
把列表初始化移到采集循环外,所有数据采集完成后用覆盖模式一次性写入完整数组,写法简单不易出错:
import json # 采集开始前,在循环外部初始化全局存储列表 person_info = [] # 替换为你实际遍历采集站点数据的循环逻辑 for item in 站点数据源: # 替换为你实际提取name、mail字段的逻辑 name = "提取到的姓名值" mail = "提取到的邮箱值" # 单条数据直接追加到全局列表 person_info.append( { "Name": name, "Mail": mail, } ) # 所有数据采集完成后,用覆盖模式'w'打开文件,一次性写入完整JSON数组 with open(filename, 'w', encoding='utf-8') as file: json.dump(person_info, file, indent=4, ensure_ascii=False)
大数据量适配方案(边采集边写入,避免内存占用过高)
如果采集数据量极大,无法全部加载到内存后再写入,可以手动控制JSON数组的前后括号和元素分隔符:
import json # 文件初始化时先写入数组起始左括号 with open(filename, 'w', encoding='utf-8') as f: f.write('[') is_first = True # 替换为实际采集循环 for item in 站点数据源: name = "提取到的姓名值" mail = "提取到的邮箱值" current_data = {"Name": name, "Mail": mail} with open(filename, 'a', encoding='utf-8') as f: # 非首条数据写入前,先加逗号分隔上一条元素 if not is_first: f.write(',') json.dump(current_data, f, indent=4, ensure_ascii=False) is_first = False # 所有数据采集完成后,写入数组结束右括号 with open(filename, 'a', encoding='utf-8') as f: f.write(']')
注意事项
- 标准JSON文件只允许存在1个根结构,不能在文件中并排拼接多个独立数组/对象
- 全量写入时必须使用
'w'覆盖模式,不要用'a'追加模式,避免旧文件残留内容导致格式错误 - 写入完成后可直接用JSON格式化校验工具检查格式,确认无语法问题后再投入使用
内容的提问来源于stack exchange,提问作者Dandark
相关产品推荐
相关产品推荐

