播放scala读取带实例的Map [Int,List [String]]

时间:2018-10-10 22:20:33

标签: json scala playframework play-json

我正在使用Scala和Play框架。因此,我的结构是 Map [Int,List [String]] ,我需要为此定义一个格式程序。我还不仅需要将键解析为Ints,而且如果其中一个键没有成功解析,也会出现en错误。这是我尝试编写的代码,但显然无法正常工作。

def mapReads: Reads[Map[Int, List[String]] = new Reads[Map[Int, List[String]] {
def reads(myJs: JsValue): JsResult[Map[Int, List[String]] =
    (myJs.as[Map[String, List[String]].map{case (k, v) =>
        Integer.parseInt(k) -> v
    }).map(JsSuccess(_)).getOrElse(JsError("Key was not Integer"))
}

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这应该对您有用:

import play.api.libs.json._

implicit val mapReads: Reads[Map[Int, List[String]]] = new Reads[Map[Int, List[String]]] {
    def reads(jv: JsValue): JsResult[Map[Int, List[String]]] =
        JsSuccess(jv.as[Map[String, List[String]]]
                    .map{
                        case (k, v:List[String]) => Integer.parseInt(k) -> v
                     })
}

尝试一下:

val json = Json.parse("""{ "1": ["one", "two"] }""")

println(json.validate[Map[Int, List[String]]])