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

嵌套JSON转Pandas DataFrame:如何拆分form_data与form_files列(避免元数据行)

如何将嵌套JSON的form_data和form_files展开为Pandas DataFrame的独立列

我完全懂你这种被JSON嵌套结构卡壳的感觉——明明json_normalize已经帮了大忙,但form_data和form_files这种数组型嵌套就是搞不定,对吧?别担心,我来给你一套可行的解决方案,把这些嵌套内容拆成你想要的独立列。

分步解决方案

假设你的JSON数据已经加载为Python字典(如果是字符串格式,先用json.loads()转换),我们分三步处理:

1. 标准化第一层嵌套数据

先用json_normalize处理custom_status、category这类简单嵌套,先得到基础的DataFrame:

import pandas as pd
import json

# 假设你的原始JSON数据已经是字典格式
data = { "id": "0c576f35-d704-4fa8-8cbb-311c6be36358", ... } # 你的完整JSON字典

# 标准化第一层嵌套(比如custom_status、category)
df_main = pd.json_normalize(data)

2. 展开form_data为独立列

form_data是一个包含field_id和values的数组,我们可以把每个field_id作为列名,values的第一个元素作为对应值(从你的数据看每个values都是单元素数组):

# 将form_data转换为键值对字典
form_data_dict = {item['field_id']: item['values'][0] for item in data['form_data']}
# 转换为DataFrame
df_form_data = pd.DataFrame([form_data_dict])

3. 处理form_files数据

form_files是文件信息数组,我们可以把每个文件的id、filename、field_id提取为带索引的独立列(支持多个文件的情况):

form_files_dict = {}
for idx, file in enumerate(data['form_files']):
    form_files_dict[f'form_file_{idx}_id'] = file['id']
    form_files_dict[f'form_file_{idx}_filename'] = file['filename']
    form_files_dict[f'form_file_{idx}_field_id'] = file['field_id']
df_form_files = pd.DataFrame([form_files_dict])

4. 合并所有DataFrame

最后把基础数据、form_data展开数据、form_files数据合并成最终的DataFrame:

# 先删掉主DataFrame里的原始嵌套列,再合并
final_df = pd.concat(
    [df_main.drop(['form_data', 'form_files'], axis=1), df_form_data, df_form_files],
    axis=1
)

处理多个请求的情况

如果你的数据是包含多个请求的JSON数组,只需要把上面的逻辑封装成函数,循环处理每个请求再合并:

def process_single_request(request_data):
    # 处理主数据
    df_main = pd.json_normalize(request_data)
    # 处理form_data
    form_data_dict = {item['field_id']: item['values'][0] for item in request_data['form_data']}
    df_form_data = pd.DataFrame([form_data_dict])
    # 处理form_files
    form_files_dict = {}
    for idx, file in enumerate(request_data['form_files']):
        form_files_dict[f'form_file_{idx}_id'] = file['id']
        form_files_dict[f'form_file_{idx}_filename'] = file['filename']
        form_files_dict[f'form_file_{idx}_field_id'] = file['field_id']
    df_form_files = pd.DataFrame([form_files_dict])
    # 合并返回
    return pd.concat([df_main.drop(['form_data', 'form_files'], axis=1), df_form_data, df_form_files], axis=1)

# 假设data_list是多个请求的JSON字典列表
data_list = [request_1, request_2, request_3]
final_df = pd.concat([process_single_request(req) for req in data_list], ignore_index=True)

这样处理后,你就能得到完全展开的DataFrame:form_data里的每个字段(比如subcategory、art-der-massnahme)都变成了独立列,form_files的信息也清晰地拆分成了单独的列,再也看不到嵌套的数组结构啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:37:34