You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对pandas DataFrame中JSON值的双引号转义以实现正常解析

处理Pandas DataFrame中异常JSON列的通用方案

核心问题是details列的JSON格式不规范,值内部的双引号未加转义导致标准json.loads解析失败,以下两种通用方案均可自动处理所有异常记录,无需手动定位替换,且能完整保留原始值:

方案一:使用容错JSON解析库(推荐)

优先使用专门兼容不规范JSON的解析库,无需自己写正则匹配逻辑,适配性更高,性能损耗极小:

  1. 安装依赖库dirtyjson,该库专门处理各类不规范的JSON字符串:
pip install dirtyjson
  1. 自定义解析函数,正常记录走标准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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:45:03