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

使用Python将含CSV格式字段的JSON转为结构化可读JSON并保留值类型

解决方案

1. 更优雅的实现方式

你可以直接用Python标准库自带的csv.DictReader省去手动拼接字典的逻辑,同时抽离公共转换函数适配多字段批量处理,核心优化点如下:

  • 用csv.DictReader直接将CSV每行转换为以表头为key的字典结构,无需手动拆分表头和内容做zip拼接
  • 抽离CSV转换逻辑为独立函数,后续新增需要转换的字段仅需修改目标字段列表即可,无需重复编码
  • 用StringIO包装CSV字符串,适配csv模块的输入要求,避免手动处理换行符带来的异常

2. 字符串类型自动转原生类型方案

使用ast模块的literal_eval方法即可解决类型问题,该方法可以安全地将字符串形式的int、float、列表、元组等Python字面量转换为对应原生类型,遇到无法转换的普通字符串也可以做兼容处理,不会报错。
相比直接用eval,literal_eval仅会解析字面量结构,不会执行任意代码,安全性更高,完全适配你当前的场景。

完整可运行代码

import json
import ast
import csv
from io import StringIO

# 类型转换辅助函数
def convert_value(val: str):
    try:
        return ast.literal_eval(val)
    except (ValueError, SyntaxError):
        # 无法转换为字面量的内容保留原字符串
        return val

# CSV字符串转结构化列表函数
def csv_str_to_struct(csv_str: str):
    reader = csv.DictReader(StringIO(csv_str))
    return [
        {key: convert_value(value) for key, value in row.items()}
        for row in reader
    ]

if __name__ == "__main__":
    # 读取源JSON文件
    with open("test.json", "r", encoding="utf-8") as f:
        source_data = json.load(f)
    
    # 定义需要转换的CSV字段列表,新增字段直接追加到列表即可
    TARGET_FIELDS = ["levelConfigList", "profitConfigList"]
    
    # 批量转换目标字段
    inner_data = source_data["data"]["data"]
    for field in TARGET_FIELDS:
        if field in inner_data:
            inner_data[field] = csv_str_to_struct(inner_data[field])
    
    # 输出转换结果(如果需要写入文件,替换print为json.dump即可)
    print(json.dumps(source_data, indent=4, ensure_ascii=False))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:12:02