Есть ли лучший способ, чем asOpt конвертировать JSON в модель - PullRequest
0 голосов
/ 24 июня 2018

Я использую JsValue asOpt для преобразования json в модель T. Моя проблема в том, что синтаксический анализ json не выполняется, и я получаю None, но нет описательного сообщения об ошибке, которое указывает на проблему с json. Есть ли лучший метод, чем asOpt, который я мог бы использовать?

Код, который преобразует JsValue в модель:

implicit val myDataReads:Reads[MyData] = (
    (JsPath \ "field1").readNullable[UUID] and
    (JsPath \ "field2").read[String] and
      (JsPath \ "field3").read[List[String]] and
      (JsPath \ "field4").read[Seq[Byte]] and
      (JsPath \ "field5").read[String] and
      (JsPath \ "field6").read[Set[String]] and
      (JsPath \ "field7").read[String] and
      (JsPath \ "field8").read[String]
    )(MyData.apply _)

Вышеуказанное не является описательным. Я думал создать свой кастом Reads, но я застрял. Пока я написал:

val myDataReads = new Reads[MyData] {

//the JsValue passed to this reads should conform to structure expected by MyData
def reads(jsv:JsValue) = JsResult = {
//I want to pick each field, check its value and print error is something is wrong
  val uuidOptionReads:Reads[Option[UUID]] = (JsPath \ "field1").readNullable[UUID]; //not sure if this is correct
  //now I have got new Reads but how do I get uuid from here?
uuidOptionReads.reads(/*reads expects a JsValue but I don't know what to pass here.*/)
/*I want to repeat the above logic for other fields*/
}

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...