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

Python中使用Pandas将嵌套JSON转换为指定结构DataFrame

嵌套JSON转目标DataFrame实现方案

核心思路是先提取需要关联的基础字段(id、Simple Fields下的所有字段),再将Linhas数组拆分为多行,最后把Linhas中的字典结构展开为单独列,实现每行对应一条Linhas明细并关联所有基础字段。

单条API响应处理示例

假设API返回的嵌套JSON结构如下:

import pandas as pd
import json

# 模拟API返回数据
api_response = {
    "id": "123",
    "resultJson": {
        "Simple Fields": {
            "NumFatura": "FAT-001",
            "Data": "2024-05-20",
            "Cliente": "ABC Corp"
        },
        "Linhas": [
            {"Produto": "Item A", "Quantidade": 2, "Preco": 10.5},
            {"Produto": "Item B", "Quantidade": 1, "Preco": 25.0},
            {"Produto": "Item C", "Quantidade": 5, "Preco": 3.2}
        ]
    }
}

处理步骤:

  1. 合并id与Simple Fields字段,保留Linhas数组
base_data = {
    "id": api_response["id"],
    **api_response["resultJson"]["Simple Fields"]
}
base_data["Linhas"] = api_response["resultJson"]["Linhas"]
  1. 转换为DataFrame并拆分Linhas为多行
df = pd.DataFrame([base_data])
df_exploded = df.explode("Linhas", ignore_index=True)
  1. 展开Linhas中的字典为独立列,合并到原DataFrame
df_final = pd.concat(
    [df_exploded.drop("Linhas", axis=1), 
     df_exploded["Linhas"].apply(pd.Series)],
    axis=1
)

最终df_final的结构就是每行对应一条Linhas明细,同时关联id、NumFatura、Data等所有基础字段。

多条API响应批量处理示例

如果返回的是多条数据的列表,可通过循环批量处理:

# 模拟多条API返回数据
api_responses = [
    {
        "id": "123",
        "resultJson": {
            "Simple Fields": {"NumFatura": "FAT-001", "Data": "2024-05-20", "Cliente": "ABC Corp"},
            "Linhas": [{"Produto": "Item A", "Quantidade": 2, "Preco": 10.5}, {"Produto": "Item B", "Quantidade": 1, "Preco": 25.0}]
        }
    },
    {
        "id": "456",
        "resultJson": {
            "Simple Fields": {"NumFatura": "FAT-002", "Data": "2024-05-21", "Cliente": "XYZ Ltd"},
            "Linhas": [{"Produto": "Item C", "Quantidade": 3, "Preco": 5.0}, {"Produto": "Item D", "Quantidade": 4, "Preco": 8.0}]
        }
    }
]

# 批量预处理每条数据
processed_list = []
for resp in api_responses:
    item = {"id": resp["id"], **resp["resultJson"]["Simple Fields"]}
    item["Linhas"] = resp["resultJson"]["Linhas"]
    processed_list.append(item)

# 转换并拆分
df = pd.DataFrame(processed_list)
df_exploded = df.explode("Linhas", ignore_index=True)
df_final = pd.concat([df_exploded.drop("Linhas", axis=1), df_exploded["Linhas"].apply(pd.Series)], axis=1)

注意事项

  • 如果Simple Fields中的字段名包含空格或特殊字符,可通过df.rename(columns={"原字段名": "新字段名"}, inplace=True)修改列名
  • 若Linhas中存在缺失字段,apply(pd.Series)会自动填充NaN,可根据需求用fillna()处理缺失值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:20:28