在使用argonaut解析JSON时,是否有更简单的方法为未提供或空字符串字段提供默认值?

时间:2014-09-22 15:04:17

标签: json scala 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 个答案:

没有答案