如何对pandas DataFrame中JSON值的双引号转义以实现正常解析
处理Pandas DataFrame中异常JSON列的通用方案
核心问题是details列的JSON格式不规范,值内部的双引号未加转义导致标准json.loads解析失败,以下两种通用方案均可自动处理所有异常记录,无需手动定位替换,且能完整保留原始值:
方案一:使用容错JSON解析库(推荐)
优先使用专门兼容不规范JSON的解析库,无需自己写正则匹配逻辑,适配性更高,性能损耗极小:
- 安装依赖库
dirtyjson,该库专门处理各类不规范的JSON字符串:
pip install dirtyjson
- 自定义解析函数,正常记录走标准JSON解析保证速度,异常记录走容错解析:
import pandas as pd import json import dirtyjson def parse_details(s): try: return json.loads(s) except json.JSONDecodeError: return dirtyjson.loads(s) # 替换原有代码中的json.loads即可 result = df.pop('details').apply(parse_details).apply(pd.Series).join(df)
方案二:原生Python正则修复(无额外依赖)
如果生产环境不能安装第三方库,可以用正则自动识别并转义值内部的双引号:
import pandas as pd import json import re def fix_bad_json(s): # 匹配JSON的"key":"value"结构,仅转义值内部的双引号 pattern = re.compile(r'("(?:\\.|[^"\\])*"\s*:\s*")(.*?)(?="\s*(?:,|}))', re.DOTALL) def escape_inner_quotes(match): key_prefix = match.group(1) value_part = match.group(2).replace('"', '\\"') return key_prefix + value_part return pattern.sub(escape_inner_quotes, s) def parse_details(s): try: return json.loads(s) except json.JSONDecodeError: return json.loads(fix_bad_json(s)) result = df.pop('details').apply(parse_details).apply(pd.Series).join(df)
两种方案均支持百万级数据处理,只有异常记录会走额外的修复/容错逻辑,不会影响大部分正常记录的解析速度。
内容的提问来源于stack exchange,提问作者trojan horse
相关产品推荐
相关产品推荐

