gpt4 book ai didi

json - 使用jq获取json中匹配的元素之后/之前的元素

转载 作者:行者123 更新时间:2023-12-05 04:00:52 24 4
gpt4 key购买 nike

假设我有以下 json 输入到 jq 命令:

[
{"type":"dog", "set":"foo"},
{"type":"bird", "set":"bar"},
{"type":"cat", "set":"blaz"},
{"type":"fish", "set":"mor"}
]

我知道这个数组中有一个元素的 type 是“bird”,在本例中是第二个元素。但我想要它的下一个(或前一个)兄弟,即它之后(之前)的元素,在本例中是第三个(第一个)元素。 jq中怎么获取?

另外,我还有一个问题:如果匹配到的元素(也就是我知道的type值的元素)是数组中的最后一个,我希望它得到第一个作为下一个(即循环遍历数组)而不是返回任何内容。匹配到的元素是否为第一个都一样(那我要获取最后一个元素)。

最佳答案

为了具体起见,假设您要提取 (before, focus, after) 三元组作为数组,其中 beforeafter 按照描述环绕。为简单起见,我们还假设源数组的长度至少为 2。

接下来,为了便于阐述和理解,我们将定义一个辅助函数来提取这三个项目:

# $i is assumed to be a valid index into the input array,
# which is assumed to be of length at least 2
def triple($i):
if $i == 0 then [last] + .[0:2]
elif $i == (length-1) then .[$i-1: $i+2] + [first]
else .[$i-1: $i+2]
end;

现在我们只需找到索引并使用它:

(map(.type) | index("bird")) as $i
| if $i then triple($i) else empty end

使用这种方法,可以很容易地获得其他变体。

关于json - 使用jq获取json中匹配的元素之后/之前的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55896344/

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