You need to enable JavaScript to run this app. 使用json.dump保存含长列表的字典时如何避免列表元素单独换行
优惠活动
大模型
产品
解决方案
定价
更多

使用json.dump保存含长列表的字典时如何避免列表元素单独换行

问题原因

Python标准库json模块的indent参数是全局生效的格式化规则,开启后会对所有嵌套结构(包括字典、列表)的每个子元素都单独换行并添加对应层级的缩进。你保存的COCO标注中segmentation、bbox都是数值组成的长列表,每个数值单独换行就会凭空产生大量无效空白行,不仅大幅提升文件体积,也会导致编辑器打开时卡顿。
你直接在Colab打印字典片段时,Python默认不会给列表元素单独换行,所以显示为紧凑的单行格式。
另外你提到的两种格式的JSON没有任何实质差异:JSON语法中的换行、缩进、空格都属于无意义的空白字符,仅用于提高可读性,不会影响数据内容,所有兼容JSON规范的解析器都可以正常读取两种格式的文件。

解决方法

推荐使用第三方高性能JSON库orjson实现需求,它的格式化规则刚好匹配你的预期,且序列化/反序列化性能远高于标准库:

  1. 先安装依赖:
    pip install orjson
  2. 替换原有保存代码即可:
import orjson

# 注意orjson输出为bytes,所以用wb模式打开文件
with open('file.json', 'wb') as fp:
    # OPT_INDENT_2表示缩进2空格,自动将数值列表紧凑放在同一行,字典层级正常换行缩进
    fp.write(orjson.dumps(coco, option=orjson.OPT_INDENT_2))

如果不能安装第三方依赖,也可以用标准库的折中方案:先生成紧凑无缩进的JSON,再通过正则仅给字典层级添加换行缩进,跳过列表内的元素格式化,不过这种方案对结构复杂的JSON兼容性一般,适合临时使用:

import json
import re

compact_json = json.dumps(coco)
# 正则仅匹配字典结构的分隔符,添加换行和缩进
formatted_json = re.sub(r'({"|}, "|})', r'\n\1', compact_json)
with open('file.json', 'w') as fp:
    fp.write(formatted_json)

内容的提问来源于stack exchange,提问作者Edo Wexler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:36:03