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

2024-02-11

鉴于以下情况Enumeration...

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)

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

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


内置的Reads objects https://www.playframework.com/documentation/2.3.x/api/scala/index.html#play.api.libs.json.Reads%24不要定义一个Reads for a Map这是键中的参数。你可以这样做:

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) 
}

根据您的上述价值观,您将获得:

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

如果您愿意,您可以收紧这些限制A使其不适用于任何AnyRef.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Map[CustomType, String] 序列化为 JSON 的相关文章

  • CreationException:无法在 Play 2.5.18 中创建注入器错误,以使用 com.google.inject.AbstractModule 替换 GlobalSettings Java 代码

    我正在将 Play 应用程序从 2 5 12 升级到 2 5 18 当我启动该应用程序时 使用sbt 我收到此错误 CreationException 无法创建注入器 看到以下错误 1 Error injecting constructor
  • IntelliJ Play2 设置未保存

    在 IntelliJ 中 我尝试在语言和框架中保存 Play 2 编译器的以下设置 但它没有被保存 文件 设置 语言和框架 Play 2 激活 使用Play 2 确定当我随后按照上述步骤查找此设置时 它没有被激活 有谁知道为什么它没有被保存
  • 手动排除sbt中的一些测试类

    我通常在 CI 中执行以下命令 清理更新编译测试发布 但是 我想从 sbt 命令行中排除 1 个 或几个 测试类 我怎样才能做到这一点 我不想更改我的代码以使用忽略等 两种可能的选择 test only See http www scala
  • 在 Spark 中将流式 XML 转换为 JSON

    我是 Spark 新手 正在开发一个简单的应用程序 将从 Kafka 接收的 XML 流转换为 JSON 格式 Using 火花2 4 5 斯卡拉 2 11 12 在我的用例中 kafka 流采用 xml 格式 以下是我尝试过的代码 val
  • 获取两个顶点之间的边属性值时出现 ClassCastException

    我正在尝试获取两个顶点之间的边缘属性值并低于异常 java lang ClassCastException 无法将 java lang String 转换为 scala runtime Nothing 环境 内存中的泰坦 Code val
  • 用 HashMap[Int, Vector[Int]] (Scala) 表示图(邻接列表)?

    我想知道如何 如果可能的话 我可以通过以下方式制作 可变 图的邻接列表表示HashMap Int Vector Int HashMap当然是可变的 目前我将其设置为HashMap Int ArrayBuffer Int 但我可以更改 Arr
  • Scala 条件列表构造

    我正在使用 Scala 2 9 2 并且想根据某些条件构建一个列表 考虑以下情况 其中 cond 是采用谓词 p 和类型 T 的值 在本例中为 t3 的某个函数 t1 t2 cond p t3 t4 我想要的行为如下 如果 p 为真 则应给
  • Scala 模式匹配打印漂亮

    是否有可能以某种方式编组部分函数 假设它总是只包含一种情况 进入某物人类可读的 假设我们有 Any 类型的集合 消息 List Any 以及使用模式匹配块定义的 PartialFuntion Any T 的数量 case object R1
  • Scala 中缺少多重集吗?

    我正在尝试 Scala 中的 Facebook Hacker Cup 2013 资格赛问题 对于第三个问题 我觉得需要一个有序的 Multiset 但在 scala 的 2 10 集合中找不到一个 scala 的集合中是否缺少此数据结构 会
  • Scala:将整个列表的 Either 与每个元素的 Either 组合

    我有一个 Either 列表 它代表错误 type ErrorType List String type FailFast A Either ErrorType A import cats syntax either val l List
  • 如何向数据框spark添加标题和列?

    我有一个数据框 我想在其中添加标题和第一列 手动 这是数据框 import org apache spark sql SparkSession val spark SparkSession builder master local appN
  • 如何在Scala中表达这个类型?存在类型类(即隐式)限制吗?

    我正在使用 Play 框架的 JSON 库 它使用类型类来实现Json toJson功能 http www playframework org documentation api 2 0 4 scala index html play ap
  • scala.math.BigDecimal :1.2 和 1.20 相等

    将 Double 或 String 转换为 scala math BigDecimal 时如何保持精度和尾随零 用例 在 JSON 消息中 属性的类型为 String 值为 1 20 但是在 Scala 中读取这个属性并将其转换为 BigD
  • 如何使用 FS2 中的分类器函数对对象进行分组?

    我有一个无序的流measurements 我想将其分组为固定大小的批次 以便以后可以有效地保留它们 val measurements for id lt Seq foo bar baz value lt 1 to 5 yield id va
  • 按元素聚合数组

    Spark scala 相当新 我想知道是否有一种简单的方法以按列方式聚合 Array Double 这是一个例子 c1 c2 c3 1 1 1 0 1 0 3 4 1 2 1 0 0 0 4 3 2 1 0 0 0 0 0 0 2 3 1
  • WSClient - 打开的文件太多

    我正在 CentOS 6 上使用 Play Framework 2 4 我的应用程序抛出此异常 java net SocketException Too many open files 我在 Stack Overflow 上搜索了很多主题并
  • Akka中有轻量级的actor吗?

    我的用例非常简单 在两个对象之间交换少量 现在我正在从 Scala Actors 迁移到 Akka 但是我再也找不到那些轻量级 Actors 使用Akka 我不仅需要为Actor创建创建ActorSystem Props 还需要照顾Acto
  • Scala 中的高级类型 [重复]

    这个问题在这里已经有答案了 我正在阅读 Scala 中的函数式编程一书 在 Monoids 章节中 他们讨论了 Monoid 接口 如下所示 trait Monoid A def op a1 A a2 A A def zero A 后来 他
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 如何在scala中生成n-gram?

    我正在尝试在 scala 中编写基于 n gram 的分离新闻算法 如何为大文件生成 n gram 例如 对于包含 蜜蜂是蜜蜂中的蜜蜂 的文件 首先它必须选择一个随机的 n 元语法 例如 蜜蜂 然后它必须寻找以 n 1 个单词开头的 n 元

随机推荐