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

使用Python将嵌套题库JSON导出为合规CSV时出现输出异常排查

嵌套题库JSON转CSV的问题修复与实现

已知问题梳理

  • 源数据特征:嵌套结构的测验题库JSON,覆盖数学、体育两个学科,单题包含题干、选项列表、正确答案字段
  • 已完成的代码环节:导入json、csv标准库、读取本地JSON文件、实现自定义flatten扁平化方法、打开CSV输出流完成表头写入
  • 异常表现:输出的CSV仅存在表头行,无实际题目数据;单独逐字段查询JSON嵌套内容时取值结果正常
  • 已定位到的明显缺陷:CSV数据写入的核心语句被注释,未实际执行写入流程

分步实现方案

  1. 明确扁平化后的数据映射规则
    嵌套结构转一维数据时,需要把外层的学科分类作为独立字段提取,同时处理列表类型的选项字段——由于CSV默认用逗号做分隔符,不能直接把列表对象写入单元格,需要把选项拼接成固定分隔符的字符串,避免格式错乱。
  2. 修正扁平化方法逻辑
    遍历外层学科键值对,对每个学科下的题目列表逐行拆解,生成不含嵌套结构的一维字典,每个字典对应CSV的一行数据。
  3. 补全CSV写入逻辑
    取消被注释的逐行写入代码,遍历扁平化处理后的所有题目记录,逐行写入CSV流,同时配置正确的编码、空行参数,避免中文乱码、行间距异常问题。

可参考的完整实现代码

import json
import csv

# 读取嵌套结构的源JSON文件
with open("source_question_bank.json", "r", encoding="utf-8") as f:
    raw_bank = json.load(f)

def flatten_nested_bank(raw_data):
    """自定义嵌套数据扁平化方法"""
    flat_dataset = []
    # 遍历外层的学科分类键
    for subject_name, question_list in raw_data.items():
        # 遍历单学科下的所有题目
        for question in question_list:
            flat_dataset.append({
                "subject": subject_name,
                "stem": question["stem"],
                # 选项列表转分号拼接字符串,规避CSV分隔符冲突
                "option_content": "; ".join(question["options"]),
                "correct_answer": question["answer"]
            })
    return flat_dataset

# 执行扁平化处理
processed_data = flatten_nested_bank(raw_bank)

# 写入目标CSV文件
with open("export_question_bank.csv", "w", encoding="utf-8-sig", newline="") as csv_file:
    # 定义CSV表头
    header = ["subject", "stem", "option_content", "correct_answer"]
    csv_writer = csv.DictWriter(csv_file, fieldnames=header)
    # 写入表头行
    csv_writer.writeheader()
    # 逐行写入数据(原代码中此环节被注释,需要取消注释)
    for row_data in processed_data:
        csv_writer.writerow(row_data)

易错点提示

  • 打开CSV文件时必须添加newline=""参数,否则Windows系统下生成的CSV会出现大量空行
  • 编码选择utf-8-sig而非普通utf-8,避免Excel打开时中文内容乱码
  • 不要直接将列表、字典等复杂类型的字段写入CSV,否则会出现单元格格式不符合预期的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 17:45:03