我正在使用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"))
}
非常感谢任何帮助!
这应该适合你:
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]]])