gpt4 book ai didi

json - 如果多个键具有指定值,则使用 jq 返回 bool 值

转载 作者:行者123 更新时间:2023-12-01 12:06:34 25 4
gpt4 key购买 nike

我有一个 JSON blob。它包含要处理的项目队列。我正在使用 jq 来过滤它。此队列中的每个对象都有键 downloadId。我可以返回对象列表,其中 downloadId 使用此过滤器具有特定值:

.[] | select((.downloadId) == "ABCA01479FCAB77D0A8A5C499D5ABAA147E97B47")

但我真正需要的是一个 bool 值,如果队列中有多个对象具有 downloadId 的值,它将返回 true。我一直在查看 jq 手册,但我不太确定该怎么做。我可以尝试使用 any

any(.[]; .downloadId == "ABCA01479FCAB77D0A8A5C499D5ABAA147E97B47")

但如果该值有一个实例,则返回 true,不超过一个。

这是一个 Blob :

[
{
"sizeleft": 805679928.0,
"timeleft": "00:00:00",
"estimatedCompletionTime": "2019-05-03T17:30:31.370856Z",
"status": "Paused",
"trackedDownloadStatus": "Ok",
"statusMessages": [],
"downloadId": "1C2DE46A5B4258BE7AC47FEFAE71432897417126",
"id": 1065601863
},
{
"sizeleft": 836459293.0,
"timeleft": "00:00:00",
"estimatedCompletionTime": "2019-05-03T17:30:31.370864Z",
"status": "Paused",
"trackedDownloadStatus": "Ok",
"statusMessages": [],
"downloadId": "728084A13FD172FED437C6AE503A8CF4A8D317AE",
"id": 1177597916
},
{
"sizeleft": 836459293.0,
"timeleft": "00:00:00",
"estimatedCompletionTime": "2019-05-03T17:30:31.370864Z",
"status": "Paused",
"trackedDownloadStatus": "Ok",
"statusMessages": [],
"downloadId": "ABCA01479FCAB77D0A8A5C499D5ABAA147E97B47",
"id": 1177597916
}
]

最佳答案

为了实现高效的解决方案,让我们定义 repeated/2 来检查给定值是否在流中出现多次:

def repeated(stream; $value):
label $done
| foreach stream as $x (0;
if $x == $value then . + 1 else . end;
if . == 2 then true, break $done else empty end)
// false;

这里的关键当然是在第二次遇到该值时跳出循环。

解决方案

根据以上内容,解决方案是:

repeated(.[] | .downloadId; "ABCA01479FCAB77D0A8A5C499D5ABAA147E97B47")

关于json - 如果多个键具有指定值,则使用 jq 返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55974870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com