播放scala读取Map [Int,List [String]],但有异常

问题描述 投票:0回答:1

我正在使用Scala和Play框架。所以我有一个Map [Int,List [String]]的结构,我需要为它定义一个格式化程序。我还需要将密钥解析为Int,但如果其中一个密钥未成功解析,则会出错。这是我尝试编码的内容,但显然它不起作用。

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

非常感谢任何帮助!

json scala playframework play-json
1个回答
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]]])
© www.soinside.com 2019 - 2024. All rights reserved.