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

如何用Scala按模式提取子串并修正JSON中column3字段的引号?

用Scala处理不合法JSON消息的解决方案

嘿,针对你提到的JSON消息处理需求,我整理了一套完整的Scala实现方案,专门解决这两个核心问题:分割独立的JSON条目,以及修复column3字段的格式问题。

首先,先明确咱们要处理的原始数据问题:你给出的示例是不合法的JSON片段——每个条目里的column3字段值既没有首尾双引号,内部还夹杂着未转义的双引号,直接用JSON解析库肯定报错。咱们分两步解决:


第一步:拆分独立的JSON条目

原始输入是用空格分隔的多个JSON对象,但直接按空格分割不太靠谱(万一JSON内部有空格就会出错)。所以咱们用正则匹配{...}的格式,精准提取每个独立的JSON条目。

第二步:修复column3的格式

对于每个条目中的column3,咱们要做两件事:

  • 给字段值加上首尾双引号
  • 把值内部的双引号替换成单引号(避免转义的麻烦,同时保证JSON合法)

完整Scala代码实现

下面是可直接运行的代码,包含详细的注释:

import scala.util.matching.Regex

object JsonFixer {
  def main(args: Array[String]): Unit = {
    // 你的原始输入消息
    val rawInput = """{"column1":"abc","column2":"123","column3":qwe"r"ty,"column4":"abc123"} {"column1":"defhj","column2":"45","column3":asd"f"gh,"column4":"def12d"}"""
    
    // 1. 提取所有独立的JSON条目(匹配{开头、}结尾的完整对象)
    val jsonEntryRegex: Regex = """\{[^{}]+\}""".r
    val invalidEntries = jsonEntryRegex.findAllIn(rawInput).toList
    
    // 2. 逐个修复每个条目中的column3字段
    val fixedEntries = invalidEntries.map(fixColumn3Field)
    
    // 打印修复后的结果
    println("修复后的合法JSON条目:")
    fixedEntries.foreach(println)
  }

  /**
   * 修复单个JSON条目中的column3字段
   */
  private def fixColumn3Field(invalidJson: String): String = {
    // 正则匹配column3字段的格式:捕获字段名和后面的原始值
    val column3Regex: Regex = """("column3":)([^,}]+)""".r
    
    column3Regex.replaceAllIn(invalidJson, matchResult => {
      val fieldPrefix = matchResult.group(1) // 就是"column3:"
      val rawValue = matchResult.group(2)   // 比如qwe"r"ty
      // 替换内部双引号为单引号,再包裹首尾双引号
      val fixedValue = s""""${rawValue.replace("\"", "'")}""""
      s"$fieldPrefix$fixedValue"
    })
  }
}

代码运行结果

执行后会输出两个合法的JSON对象:

{"column1":"abc","column2":"123","column3":"qwe'r'ty","column4":"abc123"}
{"column1":"defhj","column2":"45","column3":"asd'f'gh","column4":"def12d"}

这些结果可以直接用Circe、Play JSON等Scala JSON库进行解析或后续处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:08:15