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

Python实现含缺失字段与嵌套结构的JSON转CSV解决方法

解决JSON Lines转CSV(字段不统一+嵌套属性)的Python方案

核心思路

要搞定这个问题,需要处理两个核心点:

  • 把嵌套的JSON结构扁平化,转成单层键值对
  • 收集所有可能出现的字段作为CSV表头,缺失字段自动留空

完整实现代码

import json
import csv
from typing import Dict, Any

def flatten_json(obj: Dict[str, Any], parent_key: str = '', sep: str = '.') -> Dict[str, Any]:
    """递归扁平化嵌套JSON,用.连接嵌套键"""
    items = []
    for k, v in obj.items():
        new_key = f"{parent_key}{sep}{k}" if parent_key else k
        if isinstance(v, dict):
            items.extend(flatten_json(v, new_key, sep=sep).items())
        else:
            # 处理示例里的JSON语法错误("true,"多了逗号),实际合法JSON可删除此判断
            if isinstance(v, str):
                v = v.rstrip(',')
            items.append((new_key, v))
    return dict(items)

# 配置文件路径
input_json_path = "your_input.json"
output_csv_path = "your_output.csv"

all_flattened_data = []
all_fields = set()

# 第一步:读取所有JSON行,扁平化并收集所有字段
with open(input_json_path, 'r', encoding='utf-8') as f:
    for line_num, line in enumerate(f, 1):
        line = line.strip()
        if not line:
            continue
        try:
            json_obj = json.loads(line)
        except json.JSONDecodeError:
            # 临时修复示例中的语法错误,实际使用时可根据情况调整或抛出错误
            fixed_line = line.replace('"true,"', '"true"')
            json_obj = json.loads(fixed_line)
        
        flattened_data = flatten_json(json_obj)
        all_flattened_data.append(flattened_data)
        all_fields.update(flattened_data.keys())

# 对字段排序,让表头更规整(可选)
sorted_fields = sorted(all_fields)

# 第二步:写入CSV文件
with open(output_csv_path, 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=sorted_fields)
    writer.writeheader()
    for row in all_flattened_data:
        writer.writerow(row)

关键细节说明

  • 扁平化处理:通过递归函数将嵌套的JSON展开,比如{"hi":{"a":"true"}}会被转成{"hi.a": "true"},避免字段名冲突。
  • 字段收集:用集合存储所有出现过的字段,自动去重,确保CSV表头包含所有可能的字段。
  • 缺失字段处理:csv.DictWriter会自动为缺失字段填充空值,无需手动处理。
  • 语法错误兼容:针对你提供的示例中第三行的JSON语法错误("true,"多了逗号),代码做了临时修复,实际使用时如果JSON格式合法,可以删除这部分容错逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:03:36