Есть ли какой-нибудь более простой подход к предоставлению значения по умолчанию для незаполненного или пустого строкового поля при анализе JSON с argonaut?

Я использую Argonaut для разбора строк JSON. Существует требование: если какое-либо поле не предоставлено, или оно пустое или пустое, вместо этого укажите строку "не указано".

У меня есть решение, но оно кажется очень сложным:

case class User(name: String, home: String)

implicit def UserDecodeJson: DecodeJson[User] = DecodeJson(j => for {
  name <- (j --\ "name").as[BlankAsNonSupplied]
  home <- (j --\ "home").as[BlankAsNonSupplied]
} yield User(name.value, home.value))

case class BlankAsNonSupplied(value: String)

implicit def BlankAsNonSuppliedDecodeJson: DecodeJson[BlankAsNonSupplied] = DecodeJson.withReattempt(a => {
  val v = a.success.map(_.focus).flatMap(_.string)
    .filterNot(_.trim.isEmpty)
    .map(BlankAsNonSupplied.apply).getOrElse(BlankAsNonSupplied("not supplied"))
  DecodeResult.ok(v)
})

Вы можете увидеть BlankAsNonSuppliedDecodeJson один очень сложный и трудный для понимания. Есть ли способ сделать это (или весь пример) проще?

0 ответов

Другие вопросы по тегам