You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动