首页 > 解决方案 > 无法避免 JSON 文件中的列表项以新行打印

问题描述

感谢 Oyono 和 chepner 解决了编辑问题!

我正在尝试将包含长列表的字典保存为 JSON 文件,而不将列表中的每个新项目都放在新行中。为了保存字典,我使用以下命令:

with open('file.json', 'w') as fp:
    json.dump(coco, fp, indent=2)

该文件非常大,我无法在 Colab 中打开它。所以当我使用 VSC 打开它时,它会在单独的行中显示列表中的每个项目。当我尝试在 Colab 中仅打印字典的一小部分时,我将所有内容都放在一行中。

任何想法为什么会发生或如何避免它?这就是它在 VSC 中的样子:

  "annotation": [
    {
        "segmentation": [
            [
                75.0,
                74.5,
                ...(many more lines like this),
                435.0,
                435.5
            ]
        ],
        "iscrowd": 0,
        "category_id": 1,
        "image_id": 43,
        "id": 430,
        "bbox": [
            11.0,
            280.0,
            117.0,
            156.0
        ],
        "area": 9897,
    }
  ],
  ]
}

这就是我希望它看起来的样子(并且无法判断文件之间是否存在实际差异)

{
 "segmentation": [ [ 316.0, 171.5, 320.5, 168.0, 332.5, 153.0, 332.5, 149.0, 330.0, 146.5, 305.0, 134.5, 292.0, 125.5, 280.0, 120.5, 275.0, 116.5, 270.0, 115.5, 261.5, 130.0, 258.0, 133.5, 251.5, 136.0, 255.0, 140.5, 282.0, 153.5, 285.0, 156.5, 289.0, 156.5, 296.0, 159.5, 310.0, 170.5, 316.0, 171.5 ] ],
                "iscrowd": 0,
                "image_id": 5,
                "category_id": 1,
                "id": 5,
                "bbox": [ 251.5, 115.5, 81.0, 56.0 ],
                "area": 2075.0
},

标签: pythonjsonformat

解决方案


您必须indent=2在调用中删除dump

with open('file.json', 'w') as fp:
    json.dump(coco, fp)

indent关键字会将您的字典对象保存为漂亮打印的 json 对象,这意味着将每个列表项打印在单独的行中。您可以在 python 控制台中尝试此操作,以查看indent对输出 json 的影响:

json.dumps({1: "a", "b": [1, 2]}, indent=2)
# will output: '{\n  "1": "a",\n  "b": [\n    1,\n    2\n  ]\n}'
json.dumps({1: "a", "b": [1, 2]})
# will output: '{"1": "a", "b": [1, 2]}'

推荐阅读