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

使用Python及pandas将特殊结构JSON转换为CSV的解决方案

问题根因

原有代码无法正常生成二维表的核心原因是对当前JSON结构判断错误:

  • 你之前的逻辑是为键值对型嵌套JSON设计的,默认values字段下的每一项是带列名键的字典,但这份JSON是BI系统导出的标准表格返回结构:
    • 所有列名按顺序存放在根节点的headers数组中
    • values下的每个子数组对应表格的一行数据,子数组内的元素按位置和headers里的列名一一对应,每个单元格是包含原始值data、显示值text的简单对象,没有附带列名键
  • 代码里硬编码的列重命名规则是适配之前其他结构JSON的,和当前文件的字段完全不匹配。
可直接运行的修正代码
import json
import pandas as pd


def read_json(filename: str) -> dict:
    try:
        with open(filename, "r", encoding="utf-8") as f:
            data = json.load(f)
    except Exception as e:
        raise Exception(f"读取文件 {filename} 失败: {str(e)}")
    return data


def main():
    json_data = read_json("response.json")
    # 提取表头
    table_columns = json_data["headers"]
    # 逐行提取单元格原始值
    table_rows = []
    for single_row in json_data["values"]:
        # 按位置提取每个单元格的data字段值,和表头顺序对齐
        row_values = [cell["data"] for cell in single_row]
        table_rows.append(row_values)
    # 构造标准二维表结构的DataFrame
    df = pd.DataFrame(table_rows, columns=table_columns)
    # 导出CSV,关闭索引输出,用utf-8-sig编码避免Windows下中文乱码
    df.to_csv("details.csv", index=False, encoding="utf-8-sig")
    print(f"转换完成,共导出{len(df)}行数据,列名:{table_columns}")


if __name__ == '__main__':
    main()
使用说明
  • 不需要调用json_normalize做嵌套展开,这份JSON的行列是按位置匹配的平铺结构,直接按索引对齐即可
  • 如果需要保留BI系统格式化后的显示文本(比如数值保留特定小数位、日期格式化后的结果),把取值逻辑里的cell["data"]替换为cell["text"]即可
  • 代码没有硬编码列名,后续如果接口返回的列有增减,只要headers和values的位置对应关系不变,不需要修改代码就能正常转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:30:53