Я пытаюсь проанализировать JSON с нулевыми значениями для некоторых полей, используя библиотеку Play. Существует класс дел, который представляет данные:
case class Id(value: Int) extends AnyVal
case class Name(value: String) extends AnyVal
case class Number(value: Int) extends AnyVal
case class Data(id: Option[Id], name: Option[Name], number: Option[Number])
Вот как в настоящее время работает синтаксический анализ:
def parse(jsValue: JsValue): Try[Seq[Data]] = Try {
jsValue.as[JsArray].value
.flatMap { record =>
val id = Id((record \ "id").as[Int])
val name = Name((record \ "name").as[String])
val number = Number((record \ "number").as[Int])
Some(Data(Some(id), Some(name), Some(number)))
}
}
Парсинг с конкретными типами данных не обрабатывает пустые случаи, поэтому эта реализациявозвращает:
Failure(play.api.libs.json.JsResultException: JsResultException(errors:List((,List(JsonValidationError(List(error.expected.jsstring),WrappedArray()))))))
Для таких входных данных:
{
"id": 1248,
"default": false,
"name": null,
"number": 2
}
Я хотел бы иметь что-то вроде этого: Seq(Data(Some(Id(1248)), None, Some(Number(2))))
Я собираюсь написатьданные в базу данных, поэтому я не против написать пустые значения для этих полей.
Как я могу обработать нулевые значения для полей в разобранном JSON?