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

Scala如何操作动态字段JSON对象实现格式映射转换

Scala动态JSON转换方案

针对顶级字段名动态的JSON转换需求,Scala生态的主流JSON处理库都可以原生支持,不需要提前定义所有字段名,以下是具体实现方案:

核心实现逻辑

所有方案的核心逻辑统一为3步:

  1. 将输入JSON字符串解析为库内置的无固定Schema JSON对象类型,不绑定预定义的case class
  2. 遍历JSON对象的所有顶级键值对,保留原键名,从对应的值对象中提取value字段的内容作为新值,可根据业务需要过滤无value字段的无效项
  3. 处理完成后将新的键值对组装为目标JSON对象,按需序列化输出

方案1:使用Circe库实现

Circe是当前Scala生态中广泛使用的纯函数式JSON处理库,实现代码如下:

import io.circe._
import io.circe.parser._

// 你的输入JSON字符串,注意原示例JSON中"value"后缺少冒号,实际使用请保证输入格式合法
val rawInputJson = """
{
  "field1": {
    "value": "some value 1",
    "description": "some test description"
  },
  "field2": {
    "value": "some value 2",
    "description": "some test description"
  }
}
"""

val convertResult = for {
  parsedJson <- parse(rawInputJson)
  jsonObject <- parsedJson.as[JsonObject]
  // 遍历所有字段,提取value字段内容,自动过滤无value的无效字段
  processedFields = jsonObject.toList.flatMap { case (fieldKey, fieldValue) =>
    fieldValue.hcursor.get[String]("value").toOption.map(fieldKey -> _)
  }
  outputJson = Json.fromFields(processedFields)
} yield outputJson

// 输出转换后的JSON字符串
println(convertResult.map(_.noSpacesSortKeys))

方案2:使用Play JSON库实现

Play JSON是Play框架自带的JSON处理库,在大量Scala服务中广泛应用,实现代码如下:

import play.api.libs.json._

val rawInputJson = """
{
  "field1": {
    "value": "some value 1",
    "description": "some test description"
  },
  "field2": {
    "value": "some value 2",
    "description": "some test description"
  }
}
"""

val parsedJson = Json.parse(rawInputJson).as[JsObject]
// 遍历处理所有字段
val processedFields = parsedJson.fields.flatMap { case (fieldKey, fieldValue) =>
  (fieldValue \ "value").asOpt[String].map(fieldKey -> JsString(_))
}
val outputJson = JsObject(processedFields)

// 输出格式化后的转换结果
println(Json.prettyPrint(outputJson))

边界情况处理

如果业务需要保留没有value字段的键,可以将上述代码中的flatMap替换为map,同时给缺失的value设置默认值即可,示例如下(以Circe为例):

val processedFields = jsonObject.toList.map { case (fieldKey, fieldValue) =>
  fieldKey -> fieldValue.hcursor.get[String]("value").getOrElse("默认值")
}

内容的提问来源于stack exchange,提问作者José Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:06:01