2016-08-03 49 views
1

工作,我想從下面的JSON文件過濾輸出得到全部以「TAG_NAME」如何使它與濾波器JQ

{ 
    ... 

    "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

有很多方法可以做到這一點,但你可以這樣做最簡單的方法是到對象轉換爲條目,讓你可以訪問密鑰,然後你想要再回到該名過濾條目再次。

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

這裏有幾個更多的解決方案:

1),用於匹配的密鑰與組合值添加

. as $d 
| keys 
| map(select(startswith("tag_Name")) | {(.): $d[.]}) 
| add 

2)濾出不匹配的鍵與delpaths

delpaths([ 
     keys[] 
    | select(startswith("tag_Name") | not) 
    | [.] 
]) 

3)濾出不匹配的鍵與減少德爾

reduce keys[] as $k (
    . 
; if ($k|startswith("tag_Name")) then . else del(.[$k]) end 
)