Python中如何将CSV中字典列表格式的字符串转换为JSON对象
解决方案:将CSV中字典列表格式字符串转换为JSON对象
嘿,我刚好处理过类似的场景,给你两个实用的方案,分别适合用原生库和用Pandas的情况:
核心思路
你遇到的问题本质是把字符串形式的Python字典列表,先解析成真实的Python对象,再转换为标准JSON格式。这里必须用安全的解析方式,避免直接用eval()带来的风险。
方案一:用Pandas处理(推荐,更简洁)
如果平时用Pandas处理CSV,这个方案最省心:
import pandas as pd import ast import json # 1. 读取CSV文件 df = pd.read_csv("your_file.csv") # 2. 假设目标列名为`review_data`,先把字符串解析为Python列表/字典 # ast.literal_eval是安全的解析方式,只处理合法的Python字面量 df["parsed_data"] = df["review_data"].apply(ast.literal_eval) # 3. 转换为JSON格式(可选:存为列或直接使用) # 转成JSON字符串,方便存入新CSV或传输 df["json_data"] = df["parsed_data"].apply(json.dumps) # 示例:获取第一行的JSON对象(Python字典列表) first_review_json = df["parsed_data"].iloc[0] # 或者获取JSON字符串 first_review_json_str = json.dumps(first_review_json)
方案二:用原生CSV库处理(无需第三方库)
如果不想依赖Pandas,用Python标准库也能搞定:
import csv import ast import json # 读取CSV并逐行处理 with open("your_file.csv", "r", encoding="utf-8") as csv_file: reader = csv.DictReader(csv_file) for row in reader: # 提取目标列的字符串(假设列名为`review_data`) dict_list_str = row["review_data"] # 安全解析为Python对象 try: parsed_data = ast.literal_eval(dict_list_str) except SyntaxError as e: print(f"解析行出错:{row},错误信息:{e}") continue # 转换为JSON字符串 json_str = json.dumps(parsed_data) # 这里可以做后续操作,比如写入新文件或打印 print(json_str)
关键注意事项
- 为什么用
ast.literal_eval而不是eval()?eval()会执行字符串里的任意代码,存在安全风险;ast.literal_eval只解析合法的Python字面量(列表、字典、字符串等),完全安全。 - 格式兼容问题:
你给出的示例用的是单引号,而JSON要求双引号——不用担心,json.dumps()会自动把单引号转换为双引号,输出标准的JSON格式。 - 异常处理:
如果CSV里有格式不合法的字符串(比如括号不配对、未闭合的引号),会触发SyntaxError,建议加上try-except块捕获错误,避免程序崩溃。
如果遇到特定的格式报错,可以把出错的字符串贴出来,我再帮你调整处理逻辑~
内容的提问来源于stack exchange,提问作者curiousguy
相关产品推荐
相关产品推荐

