Python将含多值tags的CSV转JSON格式错误的修复方法
问题根源
- 默认
csv.DictReader以逗号作为列分隔符,你的tags字段存储的是类JSON数组格式的字符串,内容中包含的逗号也被识别为列分隔符,导致多标签行被错误拆分,超出表头的部分自动归入null键下。 - 读取到的tags值是未解析的原始字符串,自带
[、]、多余引号等符号,没有做结构化解析。
修复方法
核心调整两点:
- 读取CSV每行时,固定取第一个元素作为
id,把该行剩余所有内容重新拼接为完整的tags原始字符串,避免标签内的逗号被误判为列分隔符。 - 用
json.loads()把拼接好的tags字符串解析为原生Python数组,过滤掉空字符串的无效标签,将[""]这类空标签场景统一处理为空数组。
修复后的完整可运行代码:
import csv import json def make_json(csvFilePath, jsonFilePath): data = {} with open(csvFilePath, encoding='utf-8') as csvf: # 跳过表头行 next(csvf) csvReader = csv.reader(csvf) for row in csvReader: row_id = row[0] # 拼接剩余所有列内容,还原完整tags字符串 raw_tags_str = ','.join(row[1:]) # 解析标签数组,过滤空值 tags_list = [tag for tag in json.loads(raw_tags_str) if tag] data[row_id] = { "id": row_id, "tags": tags_list } with open(jsonFilePath, 'w', encoding='utf-8') as jsonf: json.dump(data, jsonf, indent=4, ensure_ascii=False) # 替换为你的实际文件路径 csvFilePath = r'aaa.CSV' jsonFilePath = r'bbb.json' make_json(csvFilePath, jsonFilePath)
运行后得到的正确JSON输出格式如下:
{ "403744": { "id": "403744", "tags": [] }, "403745": { "id": "403745", "tags": [ "phsecurity" ] }, "403750": { "id": "403750", "tags": [ "unit-testing", "testing", "boolean" ] }, "403757": { "id": "403757", "tags": [] }, "403759": { "id": "403759", "tags": [ "object-oriented", "architectural-patterns" ] } }
内容的提问来源于stack exchange,提问作者Shen Henry
相关产品推荐
相关产品推荐

