如何使它在jq中使用过滤器

时间:2016-08-03 03:46:37

标签: json jq

我想从json文件下面过滤输出,以#34; tag_Name"

开头
{
  ...

  "tag_Name_abc": [
    "10_1_4_3",
    "10_1_6_2",
    "10_1_5_3",
    "10_1_5_5"
  ],
  "tag_Name_efg": [
    "10_1_4_5"
  ],

  ...

}

尝试但失败了。

$ cat output.json |jq 'map(select(startswith("tag_Name")))'
jq: error (at <stdin>:1466): startswith() requires string inputs

2 个答案:

答案 0 :(得分:1)

您可以通过多种方式执行此操作,但最简单的方法是将该对象转换为条目,以便您可以访问密钥,然后按照您想要的名称再次对条目进行过滤。

with_entries(select(.key | startswith("tag_Name")))

答案 1 :(得分:0)

以下是一些解决方案:

1)将匹配键的值与添加

组合在一起
   . as $d
 | keys
 | map( select(startswith("tag_Name")) | {(.): $d[.]} )
 | add

2)使用 delpaths

过滤掉非匹配的键
 delpaths([
      keys[]
    | select(startswith("tag_Name") | not)
    | [.]
 ])

3)使用 reduce del

过滤掉不匹配的键
 reduce keys[] as $k (
   .
 ; if ($k|startswith("tag_Name")) then . else del(.[$k]) end
 )