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

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

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

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

jq '. [] | select(index("a"))'只能得到完全匹配的结果,但我也["a", "b", "c"]想得到,因为“abc”包含“a”。["abc", "e", "f"]

答案1

与以下略有不同的方法划艇拿走了什么

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

最里面的测试测试每个字符串的 substring a。如果子数组中的任何字符串包含a,则选择该子数组。将map选择应用于顶级数组中的所有子数组。

结果是一个顶级数组,其中的子数组至少包含一个包含子字符串 的元素a

[
  [
    "a",
    "b",
    "c"
  ],
  [
    "abc",
    "e",
    "f"
  ]
]

答案2

jq '[.[] | select(contains(["a"]))]'

使用您的输入数组:

$ jq -c << \\ '[.[] | select(contains(["a"]))]'
[
    ["a", "b", "c"],
    ["abc", "e", "f"],
    ["g", "h", "i"]
]
\
[["a","b","c"],["abc","e","f"]]

man jqhttps://stedolan.github.io/jq/manual/)有点长,但我认为相关部分是:

contains(b)如果 b 完全包含在输入中,则过滤器将生成 true。如果 B 是 A 的子字符串,则字符串 B 包含在字符串 A 中。如果 B 中的所有元素都包含在 A 中的任何元素中,则数组 B 包含在数组 A 中。

jq '包含(["baz", "bar"])'
输入[“foobar”,“foobaz”,“blarp”]
输出真

相关内容