【发布时间】:2020-02-19 13:42:33
【问题描述】:
我的 json 看起来像这样:
{
"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 字段值:
def getExpirations(json: Json) =
root
.cards
.each
.filter(root.card_status.string.exist(_ == "active"))
.card_expiration
.selectDynamic("formatted")
.string
.getAll(json)
问题是,上面的表达式只返回一个结果 - 对于第一张卡片,但我真的需要得到类似 List(Some("01/20"), None) 的东西!在这种情况下我该怎么办?
【问题讨论】:
-
所以,您想要
nulls,但您使用的是功能性 json 库...有趣的选择。或者你在接受JsonNull吗? -
您要做的只是删除
.selectDynamic和.string。你可以得到一个List[Json]...然后你映射它们以从JObjects中提取字段,然后为JNulls获取None。 -
知道如何在代码中做到这一点吗? :) 在
card_expiration之后使用.getAll(json)不会编译,因为它需要一个int(索引?)。直接对card_expiration字段返回的内容进行操作非常困难,因为它是 circe-optics 正在使用的库内部的东西 - 单片眼镜。 -
好的,我想我设法做到了,但它涉及的手动工作比我想要的要多。没有更简单的方法吗?
标签: json scala circe circe-optics