如何使用Play Framework JSON库为Map [Int,Int]创建JSON格式?

时间:2014-10-06 20:53:13

标签: json scala playframework-2.0

我想使用Play Framework JSON库序列化Map[Int, Int]。我想要像

这样的东西

import play.api.libs.json._ implicit val formatIntMap = Json.format[Map[Int, Int]]

然而,该代码获得No unapply function found,我认为这是指Map没有提取器这一事实,因为它不是一个简单的案例类。

1 个答案:

答案 0 :(得分:1)

它会尝试创建一个JsObject但是因为它将一个String映射到一个JsValue而不是一个Int到一个JsValue而失败。您需要告诉它如何将您的密钥转换为字符串。

  implicit val jsonWrites = new Writes[Map[Int, Int]] {
    def writes(o: Map[Int, Int]): JsValue = {
      val keyAsString = o.map { kv => kv._1.toString -> kv._2} // Convert to Map[String,Int] which it can convert
      Json.toJson(keyAsString)
    }
  }

这将转换包含0 - >的Map [Int,Int]。 123进入

JsObject(
    Seq(
        ("0", JsNumber(123))
    )
)