You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:36:23