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

Scala构建嵌套Map并转JSON报错,求解决方案

解决Scala对象转指定JSON结构的问题

你的代码核心问题是外层Map构造错误,同时需要确保集合结构与JSON库的正确适配。以下是修正后的实现(以常用的Circe库为例):

修正代码示例

// 导入Circe相关包
import io.circe._
import io.circe.syntax._

// 假设values是包含value1、value2的集合,先定义对应样例类
case class Value(value1: String, value2: String)
val values = List(Value("x1", "x2"), Value("x3", "x4"))

// 构造正确的Scala集合结构后转JSON
val jsonResult = Map(
  "a" -> Map("b" -> "1", "c" -> "2"),
  "d" -> values.map(v => Map("b" -> v.value1, "c" -> v.value2))
).asJson

// 格式化输出JSON
println(jsonResult.spaces2)

关键修正点

  • 外层Map结构错误:原代码把两个独立的Map(a->...)和Map(d->...)作为参数传入外层Map,这会导致语法错误。正确写法是在同一个外层Map中定义"a"和"d"两个键值对。
  • 键类型匹配:如果a、b等不是预定义的字符串变量,直接使用字符串字面量(如"a")可避免类型不匹配,同时符合JSON键的格式要求。
  • 集合对应JSON结构:values.map生成的List[Map]会被Circe自动转换为JSON数组,正好匹配你期望的"d"字段结构。

其他JSON库适配(以Play JSON为例)

如果使用Play JSON,核心逻辑一致,仅转JSON的方法不同:

import play.api.libs.json._

case class Value(value1: String, value2: String)
implicit val valueWrites: Writes[Value] = Json.writes[Value]
val values = List(Value("x1", "x2"), Value("x3", "x4"))

val jsonResult = Json.obj(
  "a" -> Json.obj("b" -> "1", "c" -> "2"),
  "d" -> Json.toJson(values.map(v => Json.obj("b" -> v.value1, "c" -> v.value2)))
)

println(Json.prettyPrint(jsonResult))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:10:25