使用 jq 从 json 数组中获取包含搜索词的数组

使用 jq 从 json 数组中获取包含搜索词的数组

["a", "b", "c"]给定以下 json 数据和“a”作为搜索词,如何使用 jq 获取包含搜索词“a”的数组?

[
    ["a","b","c"],
    ["d","e","f"],
    ["g","h","i"]
]

答案1

我认为这符合你的要求:

'.[]|select(index("a"))'

这适用于每个子列表,它返回列表中index("a")的索引或。由于计算结果为 false,因此使用它作为条件仅查找包含 的子列表。anullnullselect()a

这是实践中的情况:

$ jq '.[]|select(index("a"))' <<EOF
> [
    ["a","b","c"],
    ["d","e","f"],
    ["g","h","i"]
]
EOF
[
  "a",
  "b",
  "c"
]

答案2

由于顶级数组可能包含一些包含查询字符串的子数组,我假设您想要的是一个顶级数组,其中每个子数组都包含查询字符串:

jq 'map(select(any(index("a"))))' file

这将选择其中至少一个(“任意”)元素是 string 的每个子数组a。您可以取消index()内部包装any()并仅使用map(select(index("a"))),但从any()语言的角度来看,使用恕我直言看起来更好,并且它也使其几乎与我对你后续问题的回答

相关内容