如何解决JSON与CSV互转时LOCATION字段值外围多余双引号问题
问题修复方案
你遇到的问题本质由两个原因共同导致:一是CSV解析时LOCATION字段内容被拆分为多列,二是坐标值为带单引号的Python字典格式,还混杂了多余的<code>标签,直接调用JSON方法必然报错。
修复步骤
1. 拼接被拆分的LOCATION字段
你给出的OrderedDict结构中,LOCATION内容被拆到了<code>LOCATION</code>、</code>COUNTRY_CODE<code>、空键三个位置,先把这三部分内容拼接得到完整的坐标字符串。
2. 清理冗余标签与符号
移除字符串中所有<code>、</code>标签以及多余的空格、转义符号。
3. 解析单引号字典
不要用正则直接替换单引号,很容易误伤内容里的合法单引号,使用ast.literal_eval可以直接解析Python格式的字典字面量,安全性和准确率都远高于手动替换。
可直接运行的代码示例
import ast import json from collections import OrderedDict # 替换为你实际读取到的异常数据 bad_item = [OrderedDict([('<code>GROUP</code>', '<code>Net-10-172-192</code>'), ('<code>NAME</code>', '<code>IOT</code>'), ('<code>CIDR</code>', '<code>192.168.69.0/24</code>'), ('<code>DESCRIPTION</code>', '``'), ('<code>DOMAIN</code>', '<code>Default Domain</code>'), ('<code>LOCATION</code>', "<code>{'coordinates': [-80.25572"), ('</code>COUNTRY_CODE<code>', ' 37.11923]'), (None, [" 'type': 'Point'}</code>", '<code>US</code>'])])][0] clean_item = {} # 拼接并解析LOCATION字段 loc_part1 = bad_item.pop('<code>LOCATION</code>').replace('<code>', '') loc_part2 = bad_item.pop('</code>COUNTRY_CODE<code>') loc_part3 = bad_item.pop(None)[0].replace('</code>', '').strip() full_loc_str = loc_part1 + loc_part2 + loc_part3 clean_item['LOCATION'] = ast.literal_eval(full_loc_str) # 清理其他字段的冗余标签与符号 for k, v in bad_item.items(): if k is None: clean_item['COUNTRY_CODE'] = v[1].replace('<code>', '').replace('</code>', '') continue clean_k = k.replace('<code>', '').replace('</code>', '') clean_v = v.replace('<code>', '').replace('</code>', '').strip('`') clean_item[clean_k] = clean_v # 生成合法JSON valid_json = json.dumps(clean_item, indent=2, ensure_ascii=False) print(valid_json)
批量处理说明
如果文件中数千条数据的拆分规则都和示例一致,直接遍历所有CSV行执行上述处理逻辑即可,单文件处理耗时不会超过10秒。如果存在其他拆分规则,只要对应调整拼接逻辑就能适配。
内容的提问来源于stack exchange,提问作者user418427
相关产品推荐
相关产品推荐

