我想从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
答案 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
)