2016-08-03 17 views
1

I Ausgabedatei von unten json filtern möchten, dass alle mit „tag_name“Wie es mit Filter in jq funktioniert

{ 
    ... 

    "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" 
    ], 

    ... 

} 

Probieren Sie etwas anfangen zu bekommen, aber gescheitert.

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

Antwort

2

gibt es viele Möglichkeiten, dies aber die einfachste Art und Weise tun können Sie dies tun können, ist, das Objekt zu Einträgen zu konvertieren, so dass Sie Zugriff auf die Schlüssel bekommen können, dann filtern die Einträge mit den Namen wollen Sie dann zurück nochmal.

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

Hier sind einige weitere Lösungen:

1) Werte für die passenden Schlüssel mit hinzufügen

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

2) Ausfiltern von nicht passenden Schlüssel mit delpaths

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

3) Ausfiltern von nicht passenden Schlüssel mit reduzieren und del

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