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

