Python处理含未转义引号的无效JSON企业数据的解决方案咨询
Python批量清洗含非法引号的企业JSON数据方案
- 核心处理逻辑
针对字段内含未转义单引号、"实体破坏JSON结构的问题,采用「预编译正则批量清理非法字符+按行流式处理」的方案,兼顾性能和兼容性,适配百万级数据量不会占用过高内存。你要求的移除值内单引号的需求可直接通过正则替换实现。 - 完整实现代码
import re import json # 可选依赖,用于显示处理进度,不需要可直接删除相关代码 from tqdm import tqdm # 预编译正则规则,百万级数据下提前编译可提升30%以上处理效率 CLEAN_RULE = re.compile(r"'|"") def clean_single_line(raw_str: str) -> dict | None: # 移除所有值内的单引号和"实体 cleaned = CLEAN_RULE.sub("", raw_str) # 将Python字典格式的单引号边界替换为JSON标准双引号 cleaned = cleaned.replace("'", '"') try: return json.loads(cleaned) except json.JSONDecodeError: # 解析失败返回None,后续统一记录错误 return None def batch_process(input_path: str, output_path: str): with open(input_path, "r", encoding="utf-8") as in_f, \ open(output_path, "w", encoding="utf-8") as out_f, \ open("parse_error.log", "a", encoding="utf-8") as err_f: # 按行流式读取,不管文件多大都不会占满内存 for line in tqdm(in_f): line = line.strip() if not line: continue parsed_data = clean_single_line(line) if parsed_data: out_f.write(json.dumps(parsed_data, ensure_ascii=False) + "\n") else: err_f.write(line + "\n") if __name__ == "__main__": # 替换为你的输入输出文件路径即可运行 batch_process("raw_data.txt", "cleaned_data.jsonl")
- 效果验证
你提供的样例数据经过处理后,会输出符合JSON规范的结构:
{"OrgNo": "x", "CountryCode": "x", "CompanyName": "Companys name", "LegalForm": 1}
可直接通过json.loads正常解析为Python字典。
- 性能说明
普通消费级CPU测试,单进程处理100万条数据耗时约5-8分钟,可根据设备配置开启多进程进一步压缩处理时间。
内容的提问来源于stack exchange,提问作者Seign
相关产品推荐
相关产品推荐

