gpt4 book ai didi

arrays - 使用 jq 根据 json 中的另一个属性获取键列表

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

我正在尝试为 JSON 创建一个 jq 过滤器,类似于 How to filter an array of objects based on values in an inner array with jq? - 但即使以此为基础似乎也没有给我想要的结果。

这是我的示例 json

[{"id":"0001","tags":["one","two"]},{"id":"0002", "tags":["two"]}]

我想返回标签包含“one”的 ID 列表(不是部分字符串匹配,而是完整元素匹配)。

我尝试了一些变体,但无法获得正确的过滤器。

. - map(select(.resources[] | contains("one"))) | .[] .id

返回“0001”,“0002”

也尝试过....resources[].one)) | ... 但当尝试按“一”过滤并期望仅获得 0001

时,始终会获得完整列表

我哪里过滤错了? (有大约 30 分钟的 jq 经验,所以如果这是显而易见的事情,请原谅我的无知:)

最佳答案

map(select(.tags | index("one")) | .id)

由于您的问题描述表明您想要检查数组是否包含“one”,因此最简单的方法是使用索引

更新

2017 年 1 月 30 日,添加了名为 IN 的内置函数,用于有效测试 JSON 实体是否包含在流中。它还可用于有效测试数组中的成员资格。在本例中,相关用法是:

map(select(.tags as $tags | "one" | IN($tags[])) | .id)

如果您的 jq 没有 IN/1,那么只要您的 jq 有 first/1,您就可以使用以下等效定义:

def IN(s): . as $in | first(if (s == $in) then true else empty end) // false;

(实际上,index/1 通常足够快,但其目前的实现(jq 1.5 和至少到 2017 年 7 月的版本)并不是最优的。)

关于arrays - 使用 jq 根据 json 中的另一个属性获取键列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836961/

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