如何保存多层级字典:顶层键值对单行显示,内部结构不换行
自定义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
相关产品推荐
相关产品推荐

