使用jq语句嵌套筛选json文件



我有一个json文件,中每个对象的结构如下

{
"id": 2400321267,
"data": {
"q": "quinoa black bean and shrimp r",
"r": "quinoa black bean and shrimps r",
"s": "3"
},
"job_id": 1413792,
"results": {
"judgments": [
{
"id": 5022700047,
"unit_state": "good",
"data": {
"rewrite_quality": "1"
},
}
],
}
},
{
"id": 2400321267,
"data": {
"q": "quinoa black bean and shrimp r",
"r": "quinoa black bean and shrimps r",
"s": "3"
},
"job_id": 1413792,
"results": {
"judgments": [
{
"id": 5022700047,
"unit_state": "good",
"data": {
"rewrite_quality": "2"
},
}
],
}
}

我试图使用命令jq '.[] | select(any(.Tags[]; .rewrite_quality == "1"))' | less来查看输出是否正确,但我没有看到任何输出。

我希望输出中只有rewrite_quality=='1'的条目,在这种情况下只有第一个条目。

在字里行间阅读,似乎以下过滤器应该实现所述目标:

.[]
| select( .results | any(.judgments[]; .data.rewrite_quality == "1"))

"标记">

如果使用".Tags"的目的是表明通向.rewrite_quality的路径无关紧要,那么要使用的过滤器将是:

.[]
| select( any(.. | objects | .rewrite_quality == "1"))

使用less的替代方案

如果你想简单地指示是否有匹配,你可以使用这个过滤器,它的附加值是显示有多少对象符合标准:

map(select(any(.. | objects | .rewrite_quality == "1"))) | length

最新更新