Проблема в том, что к тому времени, как вы сделали шаг formatted
, вы уже не соответствует истечению null
. Вы могли бы сделать что-то вроде этого:
import io.circe.Json, io.circe.optics.JsonPath.root
def getExpirations(json: Json) =
root
.cards
.each
.filter(root.card_status.string.exist(_ == "active"))
.card_expiration
.as[Option[Map[String, String]]]
.getAll(json)
Или:
import io.circe.Json, io.circe.generic.auto._, io.circe.optics.JsonPath.root
case class Expiration(formatted: String)
def getExpirations(json: Json) =
root
.cards
.each
.filter(root.card_status.string.exist(_ == "active"))
.card_expiration
.as[Option[Expiration]]
.getAll(json)
А затем:
scala> getExpirations(io.circe.jawn.parse(doc).right.get)
res0: List[Option[Expiration]] = List(Some(Expiration(01/20)), None)
Без дополнительного контекста, на мой взгляд, не ясно, чтоЭто хороший пример использования оптики. Возможно, вам лучше расшифровывать классы дел или использовать курсоры. Если бы вы могли предоставить больше информации, это было бы легче сказать.