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

Scala Spark中修复DataFrame内JSON字符串列的错误值问题

修正Spark DataFrame中错误JSON格式的解决方案

你的原有正则"""(".*?")(".*?")"""存在逻辑问题:它会匹配所有连续的两个带引号的字符串,包括已经正确的键值对(比如"name":"neo"),导致正确的部分被错误修改为"name"::"neo",反而破坏了正常数据。

正确的解决方案

使用带负向先行断言的正则,只匹配键引号后未带冒号、直接跟值引号的错误格式,避免影响正确的JSON内容:

// 适用于键名为字母/数字/下划线的常规场景
val regex = """("[\w]+")(?!:)(".*?")"""
df.withColumn("updated_col", regexp_replace(col("value"), regex, "$1:$2"))

如果你的JSON键名可能包含空格或其他特殊字符(符合JSON规范的合法键名),可以用更通用的正则:

val regex = """("([^"]+)")(?!:)(".*?")"""
df.withColumn("updated_col", regexp_replace(col("value"), regex, "$1:$2"))

正则说明

  • "[\w]+" / "([^"]+)":匹配JSON的键名(前者限制为常规标识符,后者支持任意合法键名)
  • (?!:):负向先行断言,确保键的引号后面没有冒号,只定位错误格式
  • "[.*?]":非贪婪匹配值的字符串,避免跨多个键值对或多行匹配

用这个方案处理你提供的错误JSON,会得到正确格式:

{"name":"neo",
"age":"22",
"city":"nowhere",
"country":""}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:32:42