Как условно проанализировать JSON перед десериализацией в следующий класс дел:
case class UserInfo(id: String, startDate: String, endDate: String)
У меня есть неявное чтение
object UserInfo {
implicit val reads: Reads[UserInfo] = (
(__ \ "id").read[String] and
(__ \ "startDate").read[String] and
(__ \ "endDate").read[String]
)(UserInfo.apply _)
}
Я могу проанализировать следующий json, используя приведенные выше неявные чтения
val jsonString = """
{
"users":[
{
"id":"123",
"startDate":"2019-06-07",
"endDate":"2019-06-17"
},
{
"id":"333",
"startDate":"2019-06-07",
"endDate":"2019-06-27"
}
]
}"""
val userInfoList = (Json.parse(jsonString) \ "users").as[List[UserInfo]]
но иногда веб-служба возвращает JSON без startDate
и endDate
, например:
{
"users":[
{
"id":"123",
"startDate":"2019-06-07",
"endDate":"2019-06-17"
},
{
"id":"333",
"startDate":"2019-06-07"
},
{
"id":"444"
}
]
}
Как условно проанализировать json, чтобы игнорировать объекты, которые не* startDate
или endDate
без обязательного заполнения этих полей в модели UserInfo
?