首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用circe-optics从json检索空值

使用circe-optics从json检索空值
EN

Stack Overflow用户
提问于 2019-10-23 18:20:24
回答 1查看 220关注 0票数 3

我拥有的json如下所示:

代码语言:javascript
复制
{
    "cards": [
        {
            "card_id":"1234567890",
            "card_status":"active",
            "card_expiration":{
                "formatted":"01/20"
            },
            "debit":{
                "masked_debit_card_number":"1111 **** **** 1111",
            }
        },
        {
            "card_id":"1234567891",
            "card_status":"active",
            "card_expiration":null,
            "debit":{
                "masked_debit_card_number":"2222 **** **** 2222",
            }
        }
    ]
}

我正在尝试使用此函数检索所有card_expiration字段值:

代码语言:javascript
复制
def getExpirations(json: Json) =
    root
        .cards
        .each
        .filter(root.card_status.string.exist(_ == "active"))
        .card_expiration
        .selectDynamic("formatted")
        .string
        .getAll(json)

问题是,对于第一张卡,上面的表达式只返回1个结果,但我真的需要像List(Some("01/20"), None)这样的东西!在这种情况下我能做些什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-23 20:22:46

问题在于,当您完成formatted步骤时,您将不再匹配null过期时间。你可以这样做:

代码语言:javascript
复制
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)

或者:

代码语言:javascript
复制
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)

然后:

代码语言:javascript
复制
scala> getExpirations(io.circe.jawn.parse(doc).right.get)
res0: List[Option[Expiration]] = List(Some(Expiration(01/20)), None)

没有更多的背景,在我看来,这不是circe-optics的一个很好的用例。你最好解码成case类,或者使用游标。如果你能提供更多的信息,就更容易说出来了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58520656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档