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

Python提取API返回JSON指定字段 展开嵌套数据生成目标CSV

实现方案

需求说明

  • 从API返回的JSON响应中提取results键下的id、unid、userHierarchies三类字段,忽略其余无关数据
  • 导出CSV固定表头为id,unid,hierarchyField,value
  • 将每条用户记录下嵌套的userHierarchies数组拆分为多行,每个层级条目单独占一行,每行携带所属用户的id、unid值
  • 原有直接将results列表转pandas DataFrame导出的方案,无法完成嵌套数组的展开拆分,无法生成符合格式要求的文件

原始JSON结构示例

{
  "code": 200,
  "msg": "success",
  "results": [
    {
      "id": 1001,
      "unid": "u_abc123",
      "name": "张三",
      "email": "zhangsan@example.com",
      "userHierarchies": [
        {"hierarchyField": "department", "value": "技术部"},
        {"hierarchyField": "position", "value": "后端开发"},
        {"hierarchyField": "region", "value": "华东区"}
      ]
    },
    {
      "id": 1002,
      "unid": "u_def456",
      "name": "李四",
      "email": "lisi@example.com",
      "userHierarchies": [
        {"hierarchyField": "department", "value": "产品部"},
        {"hierarchyField": "position", "value": "产品经理"}
      ]
    }
  ]
}

目标CSV格式样例

id,unid,hierarchyField,value
1001,u_abc123,department,技术部
1001,u_abc123,position,后端开发
1001,u_abc123,region,华东区
1002,u_def456,department,产品部
1002,u_def456,position,产品经理

原有错误实现

import pandas as pd
import requests

# 调用API获取响应
resp = requests.get("your_api_address")
json_data = resp.json()

# 错误逻辑:直接转换DataFrame无法拆分嵌套的userHierarchies数组
df = pd.DataFrame(json_data["results"])
df.to_csv("user_export.csv", index=False)

可直接运行的正确代码

方案1:pandas内置方法实现(代码最简洁)

利用pandas的explode方法拆分嵌套数组,再展开字典字段为独立列:

import pandas as pd
import requests

# 拉取API数据
resp = requests.get("your_api_address")
json_data = resp.json()
source_data = json_data["results"]

# 第一步:过滤无关字段,仅保留需要的三类数据
filtered_data = [
    {
        "id": item["id"],
        "unid": item["unid"],
        "userHierarchies": item["userHierarchies"]
    } for item in source_data
]

# 第二步:拆分嵌套数组为多行
df = pd.DataFrame(filtered_data)
df = df.explode("userHierarchies", ignore_index=True)
# 拆分层级字典为独立列
df = pd.concat(
    [df.drop(columns=["userHierarchies"]), df["userHierarchies"].apply(pd.Series)],
    axis=1
)

# 第三步:按指定列顺序导出CSV
df = df[["id", "unid", "hierarchyField", "value"]]
df.to_csv("user_hierarchy_export.csv", index=False, encoding="utf-8-sig")

方案2:原生Python实现(无pandas依赖,适合轻量场景)

逐行遍历构造导出数据,用标准库csv模块写入文件,不需要安装第三方数据处理库:

import csv
import requests

# 拉取API数据
resp = requests.get("your_api_address")
json_data = resp.json()
source_data = json_data["results"]

# 逐行构造导出记录
export_rows = []
for user_info in source_data:
    uid = user_info["id"]
    unid = user_info["unid"]
    # 遍历每个层级条目,关联用户基础信息
    for hierarchy_item in user_info["userHierarchies"]:
        export_rows.append({
            "id": uid,
            "unid": unid,
            "hierarchyField": hierarchy_item["hierarchyField"],
            "value": hierarchy_item["value"]
        })

# 写入CSV文件
with open("user_hierarchy_export.csv", "w", encoding="utf-8-sig", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=["id", "unid", "hierarchyField", "value"])
    writer.writeheader()
    writer.writerows(export_rows)

注意事项

  • 导出时使用utf-8-sig编码可避免Windows环境下用Excel打开CSV时出现中文乱码
  • 若接口返回的userHierarchies存在空数组,上述两种方案会自动跳过该用户的层级记录,不会生成无效空行;如果需要保留空记录,可在遍历逻辑前增加判断补全默认值
  • pandas方案要求pandas版本不低于1.1.0,该版本开始explode方法原生支持ignore_index参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:39:26