Python格式化JSON输出:如何将DataFrame转为指定层级JSON格式?
如何将DataFrame转换为格式化缩进的JSON?
没问题!你已经成功把DataFrame转换成了嵌套字典结构,现在只需要借助Python内置的json模块,就能轻松得到你想要的带缩进的格式化JSON输出。
解决方案步骤
- 第一步:导入Python自带的
json模块,无需额外安装; - 第二步:把原来直接打印字典的代码,替换为
json.dumps()函数——它能把Python字典转换成规范且带格式的JSON字符串。
修改后的完整代码
import json import pandas as pd # 假设你已经导入了pandas库 def new_json(df): drec = dict() ncols = df.values.shape[1] for line in df.values: d = drec for j, col in enumerate(line[:-1]): if not col in d.keys(): if j != ncols-2: d[col] = {} d = d[col] else: d[col] = line[-1] else: if j!= ncols-2: d = d[col] return drec a = new_json(df) # 生成带缩进的格式化JSON字符串并打印 print(json.dumps(a, indent=2, ensure_ascii=False))
关键参数说明
indent=2:指定每个层级缩进2个空格,你可以改成indent=1来完全匹配你示例里的缩进样式;ensure_ascii=False:如果你的数据包含中文,这个参数能保证中文正常显示,没有中文的话可以省略;- 关于引号:标准JSON使用双引号,
json.dumps默认生成符合规范的双引号格式。如果一定要和你的示例一样用单引号,可以用print(json.dumps(a, indent=2).replace('"', "'")),但这属于非标准写法,不推荐在正式场景使用。
修改后的输出效果(以你的数据为例)
{ "a": { "a2": { "a21": "new", "a22": "old" }, "a3": { "a31": "content" }, "a4": { "a41": "old" } }, "b": { "b1": { "b11": "content", "b12": "new", "b13": "new" } }, "c": { "c1": { "c11": "content" }, "c2": { "c21": "content" }, "c3": { "c31": "old" } } }
内容的提问来源于stack exchange,提问作者Ching




