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

如何在Python中将含嵌套缺失字段的JSON转换为CSV文件

嵌套且字段缺失的JSON转CSV解决方案

要将包含嵌套结构、部分字段缺失的JSON转换为包含所有出现过的字段的CSV,可通过Python实现,确保缺失字段对应位置留空,具体步骤和代码如下:

核心思路

  1. 全量提取字段:遍历整个JSON数据集,收集所有层级的字段(包括infos数组内的单键对象、additional infos嵌套对象里的字段),确保表头覆盖所有可能的字段。
  2. 逐行填充数据:对每个JSON对象,匹配所有已收集的字段,存在的字段提取对应值,不存在的字段设为空字符串。
  3. 写入CSV文件:使用Python内置的csv模块完成格式规范的文件写入。

完整代码实现

import json
import csv

# 读取JSON数据(可替换为从文件读取:with open('input.json', 'r') as f: data = json.load(f))
json_str = '''
[ {
    "infos": [
      { "localisation": "Kassel" },
      { "date": "01.08.2023" },
      { "places": "1 freier Platz" }
    ],
    "applying email": "exemple@starke.ma",
    "additional infos": { 
       "name": "jhon", 
       "position": "RH", 
       "email": "email@email.com" }
  },
  {
    "infos": [
      { "places": "1 freier Platz" }
    ],
    "applying email": "",
    "applying link": "www.exemple.com",
    "additional infos": {
       "name": "jhon", 
       "position": "RH", 
       "email": "email@email.com"
    }
  }
]
'''
data = json.loads(json_str)

# 收集所有字段(去重)
all_fields = set()
for item in data:
    # 处理顶层非嵌套字段
    for key in item.keys():
        if key not in ["infos", "additional infos"]:
            all_fields.add(key)
    # 提取infos数组内的所有字段
    for info_obj in item.get("infos", []):
        all_fields.update(info_obj.keys())
    # 提取additional infos内的所有字段
    all_fields.update(item.get("additional infos", {}).keys())

# 转为有序列表(可选,按字母排序保证表头顺序稳定)
all_fields = sorted(all_fields)

# 写入CSV文件
with open('output.csv', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=all_fields)
    writer.writeheader()

    for item in data:
        row_data = {}
        for field in all_fields:
            # 优先匹配顶层字段
            if field in item:
                row_data[field] = item[field]
            # 匹配infos里的字段
            elif any(field in info for info in item.get("infos", [])):
                for info in item["infos"]:
                    if field in info:
                        row_data[field] = info[field]
                        break
            # 匹配additional infos里的字段
            elif field in item.get("additional infos", {}):
                row_data[field] = item["additional infos"][field]
            # 字段缺失时留空
            else:
                row_data[field] = ""
        writer.writerow(row_data)

代码说明

  • 字段收集:通过遍历JSON的每个层级,将所有出现过的字段存入集合自动去重,确保表头包含所有可能的字段。
  • 数据填充:按顶层字段→infos字段→additional infos字段的顺序匹配,找不到对应字段时自动设为空字符串。
  • CSV写入:使用DictWriter可以直接按表头字段映射行数据,避免手动拼接带来的格式错误。

生成的CSV表头及内容示例

表头:applying email,applying link,date,email,localisation,name,places,position

内容:

applying email,applying link,date,email,localisation,name,places,position
exemple@starke.ma,,01.08.2023,email@email.com,Kassel,jhon,1 freier Platz,RH
,www.exemple.com,,email@email.com,,jhon,1 freier Platz,RH

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:17:53