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
相关产品推荐
相关产品推荐

