gpt4 book ai didi

scala - 如何将 Map[CustomType, String] 序列化为 JSON

转载 作者:行者123 更新时间:2023-12-04 00:43:23 34 4
gpt4 key购买 nike

给定以下枚举...

object MyEnum extends Enumeration {

type MyEnum = Value

val Val1 = Value("val1")
val Val2 = Value("val2")
val Val3 = Value("val3")
}

import MyEnum._

...和下​​面的 map ...

val m = Map(
val1 -> "one",
val2 -> "two",
val3 -> "three"
)

...我需要将 m 转换为 JSON:

import play.api.libs.json._

val js = Json.toJson(m)

最后一条语句无法编译,因为编译器没有找到 scala.collection.immutable.Map[MyEnum.Value,String] 类型的 Json 序列化程序。

问题:由于 Play 确实为 scala.collection.immutable.Map[String,String] 类型提供了序列化器,而我的枚举实际上包含字符串,有没有办法重用默认的 JSON 序列化器?

最佳答案

The built-in Reads objects不要为键中参数化的 Map 定义 Reads。你可以这样做:

implicit def looserMapWrites[A <: AnyRef, B : Writes]: Writes[Map[A, B]] = Writes { o => 
Json.toJson(o.map { case (key, value) =>
key.toString -> value
})(Writes.mapWrites)
}

根据您的上述值(value)观,您将获得:

scala> Json.toJson(m)(looserMapWrites)
res1: play.api.libs.json.JsValue = {"val1":"one","val2":"two","val3":"three"}

如果你愿意,你可以收紧 A 的边界,使其不适用于任何 AnyRef

关于scala - 如何将 Map[CustomType, String] 序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897921/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com