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

如何保存多层级字典:顶层键值对单行显示,内部结构不换行

自定义JSON格式化输出:顶层键值单行展示,内部结构紧凑

问题场景

现有多层级字典:

dd = {
    "A": {"a": {"1": "b", "2": "f"}, "z": ["z", "q"]},
    "B": {"b": {"1": "c", "2": "g"}, "z": ["x", "p"]},
    "C": {"c": {"1": "d", "2": "h"}, "z": ["y", "o"]},
}

使用json.dump(dd, file, indent=1)时所有层级都会换行,不符合需求;手动拼接的方式又会生成非法JSON,无法用json.load读取。期望生成的格式为:

{
    "A": {"a": {"1": "b", "2": "f"}, "z": ["z", "q"]},
    "B": {"b": {"1": "c", "2": "g"}, "z": ["x", "p"]},
    "C": {"c": {"1": "d", "2": "h"}, "z": ["y", "o"]},
    }

要求顶层每个键对应的完整子结构占一行,内部结构保持单行,同时文件可被json.load正常解析。

解决方法

通过单独处理顶层键值对,将子结构转为紧凑JSON字符串后再拼接的方式实现,代码如下:

import json

dd = {
    "A": {"a": {"1": "b", "2": "f"}, "z": ["z", "q"]},
    "B": {"b": {"1": "c", "2": "g"}, "z": ["x", "p"]},
    "C": {"c": {"1": "d", "2": "h"}, "z": ["y", "o"]},
}

with open('file.json', 'w', encoding='utf-8') as f:
    # 写入顶层左大括号
    f.write('    {\n')
    # 遍历生成每行的键值对内容
    line_list = []
    for key, val in dd.items():
        # 用json.dumps保证键和值都是标准JSON格式
        json_key = json.dumps(key)
        json_val = json.dumps(val)
        line_list.append(f'    {json_key}: {json_val},')
    # 写入所有行
    f.write('\n'.join(line_list))
    # 写入顶层右大括号
    f.write('\n    }')

说明

  • 之前手动拼接失败的原因:直接用f"{i}: {dd[i]}"会生成Python风格的字符串(比如单引号、不带转义的特殊字符),不符合JSON规范;而json.dumps会自动处理转义和格式,确保输出是合法的JSON。
  • 此方法既满足了顶层键值对单行展示的格式需求,又保证了文件可以被json.load正常读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:05:23