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

Spark Scala如何将字符串内带双引号的JSON文件加载为DataFrame

问题原因

你遇到的报错根因是JSON语法不合法:按照JSON规范,字符串内部的双引号必须用反斜杠转义,你提供的示例中"val"ue 1"这类写法会被JSON解析器判定为字符串提前闭合,直接触发语法错误,无法正常解析。

解决方案

方案1:修正源JSON生成逻辑(优先推荐)

  • 生成JSON时使用各语言的标准JSON序列化库,禁止手动拼接JSON字符串,序列化工具会自动对字符串内部的双引号做转义处理,转义后的合法JSON示例如下:
{
    "data": {
        "Field1": "val\"ue 1",
        "Field2": "value2",
        "Field3": "va\"lu\"e3"
    }
}
  • 合法JSON可以直接使用pandas的pd.read_json()接口读取,轻松转换为DataFrame格式。

方案2:预处理现有非法JSON文件

如果无法修改源JSON的生成逻辑,只能处理已有的非法文件,可以通过正则匹配修复未转义的双引号问题,Python实现代码如下:

import re
import json
import pandas as pd

# 读取非法JSON的原始文本内容
with open("your_target.json", "r", encoding="utf-8") as f:
    raw_content = f.read()

# 正则修复:匹配值内部的未转义双引号,替换为转义后的双引号
# 逻辑:冒号后的第一个双引号是值起始,逗号/大括号前的最后一个双引号是值结束,中间的双引号均为内部内容
fixed_content = re.sub(r'(?<=: ".*?)"(?=.*?"[,}])', r'\\"', raw_content)

# 解析修复后的JSON并转换为DataFrame
json_data = json.loads(fixed_content)
df = pd.DataFrame([json_data["data"]])

# 输出为CSV格式,和你预期的结果一致
print(df.to_csv(index=False))
  • 如果你不需要保留字符串内部的双引号,可以把正则替换的目标值改为空字符串'',直接删除内部双引号即可。

内容的提问来源于stack exchange,提问作者Monika

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:06:03