我正在使用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"))
}
非常感谢您的帮助!
答案 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]]])