我有一个看起来像这样的json(它是简单的jq过滤器的结果):
[{
"name": "Corrine",
"firstname": "Odile",
"uid": "PA2685",
"roles": [{
"role_name": "GQ",
"start": "2012-06-20"
},
{
"role_name": "HOUSE",
"start": "2012-06-26"
},
{
"role_name": "HOUSE",
"start": "2017-06-28"
}
]
},
{
"name": "Blanche",
"firstname": "Matthieu",
"uid": "PA2685",
"roles": [{
"role_name": "SENATE",
"start": "2014-06-20"
},
{
"role_name": "SENATE",
"start": "2012-06-26"
},
{
"role_name": "SENATE",
"start": "2012-06-28"
}
]
}
]
我想以两种方式过滤:
role_name
(roles
数组内)的第一级对象,其值为HOUSE; start
日期为2017年或之后的人。在json上面,“Corrine Odile”将是唯一被选中的人。
我尝试了一些with_entries(select(.value
表达式,但我对如何处理日期以及“至少一个”要求感到困惑。
答案 0 :(得分:1)
表格的要求"至少一个"通常可以使用any/2
有效地满足,例如
any(.roles[]; .role_name == "HOUSE")
年度检查可以(显然)通过以下方式完成:
.start | .[:4] | tonumber >= 2017
生成满足以下两个条件的对象数组:
map(select(
any(.roles[]; .role_name == "HOUSE") and
any(.roles[]; .start[:4] | tonumber >= 2017) ))
.start[:4]
是.start|.[0:4]