play scala читает для Map [Int, List [String]] с исключениями - PullRequest
0 голосов
/ 11 октября 2018

Я использую Scala и Play Framework.Итак, у меня есть структура, которая Map [Int, List [String]] , и мне нужно определить для нее форматировщик.Мне также нужно не только проанализировать ключи как Ints, но и получить ошибку, если один из ключей не был успешно проанализирован.Вот то, что я пытался кодировать, но, по-видимому, это не работает.

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 голосов
/ 16 октября 2018

Это должно работать для вас:

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]]])
...