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

如何将含嵌套数组的JSON文件批量转换为指定格式CSV?

问题:批量将嵌套JSON转换为指定格式CSV

需求说明:

  • 目录/json/reports/下有多个JSON文件,需每个文件单独转换为CSV
  • 现有代码会将JSON中的line_data_list嵌套数组存入单个CSV列,需将该数组内的line、line_num、path、value、variable、entropy_validation字段拆分为独立列
  • 保留原JSON中的其他字段(如api_result、ml_result等),添加Sl.no序号列,且line_data_list列留空

原JSON结构示例(部分):

[
    {
        "api_result": "KEY_NAME",
        "ml_result": "VALUE",
        "line_data_list": [
            {
                "line": "54A2FF607A6dsewroadeEOERD> |-",
                "line_num": 9053,
                "path": "/home/user/src/common/race/flow/prog_flow.mk",
                "value": "WOERJFOQDKSDFKKASDF0",
                "variable": null,
                "entropy_validation": true
            }
        ],
        "ml_part": 0.994396984577179,
        "rule": "GCP Client ID",
        "severity": "high"
    }
]

解决方案

修改后的Python代码可实现嵌套字段拆分、序号添加及批量转换:

import pandas as pd
import glob
import json

path = '/json/reports/*.json'
files = glob.glob(path)

for file in files:
    # 读取JSON文件内容
    with open(file, 'r') as f:
        json_data = json.load(f)
    
    # 转换为DataFrame
    df = pd.DataFrame(json_data)
    
    # 拆分行数据数组:将每个line_data_list数组元素转为单独行
    df_exploded = df.explode('line_data_list', ignore_index=True)
    
    # 展开嵌套字典为独立列
    line_data_df = pd.json_normalize(df_exploded['line_data_list'])
    
    # 合并原数据与展开的行数据字段,移除原嵌套列
    merged_df = pd.concat([df_exploded.drop('line_data_list', axis=1), line_data_df], axis=1)
    
    # 添加留空的line_data_list列
    merged_df['line_data_list'] = ''
    
    # 插入Sl.no序号列(从1开始)
    merged_df.insert(0, 'Sl.no', range(1, len(merged_df) + 1))
    
    # 定义期望的列顺序(确保字段排列符合要求)
    desired_columns = [
        'Sl.no', 'api_result', 'ml_result', 'line_data_list', 'line', 'line_num',
        'path', 'value', 'variable', 'entropy_validation', 'ml_part', 'rule', 'severity'
    ]
    # 过滤出当前DataFrame中存在的列,避免报错
    final_df = merged_df[[col for col in desired_columns if col in merged_df.columns]]
    
    # 保存为CSV文件,空值转为空字符串
    output_file = f"{file}.csv"
    final_df.to_csv(output_file, index=False, na_rep='')

关键代码说明

  • df.explode('line_data_list'):将每个父记录的line_data_list数组拆分为多行,若一个父记录包含多个行数据项,会生成对应多行(其他字段值与父记录一致)
  • pd.json_normalize():自动解析嵌套字典,将line、line_num等字段提取为独立列
  • merged_df.insert(0, 'Sl.no', ...):在DataFrame最前端添加从1开始的序号列
  • na_rep='':将JSON中的null值(如示例中的variable: null)转换为空字符串,符合CSV格式规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:54:19