2016-07-28 17 views
1

Ich habe ein Objekt wie folgt:JQ löschen mehrere Eigenschaften

{ 
    "a" : 1, 
    "b" : { 
     "c" : { 
      "c1" : "abc", 
      "source" : "abcxyz" 
     }, 
     "d" : { 
      "d1" : "abcd", 
      "source" : "abcxyz" 
     }, 
     "e" : { 
      "e1" : "abcde", 
      "source" : "abcxyz" 
     } 
    } 
} 

Meine Erwartung ist,

{ 
    "a" : 1, 
    "b" : { 
     "c" : { 
      "c1" : "abc" 
     }, 
     "d" : { 
      "d1" : "abcd" 
     }, 
     "e" : { 
      "e1" : "abcde" 
     } 
    } 
} 

ich entfernen? "Quelle" Eigenschaften. Wie kann ich das tun, ohne die Schlüssel "c", "d" oder "e" zu spezifizieren, weil sie dynamisch sind.

Antwort

1

Iterieren durch alle t er Elemente in .b, setzen dann ihren Wert auf das Ergebnis des Entfernens des .source Element von ihnen:

.b[] |= del(.source) 
+0

Es funktioniert. Vielen Dank @Santiago –

0

In der nächsten Version von jq können Sie die eingebaute Funktion walk/1 verwenden. Aber aktuelle jq-1.5 haben nicht walk/1 so haben Sie es von buitin.jq https://github.com/stedolan/jq/blob/master/src/builtin.jq

speichern folgenden Code als hoo.jq

def walk(f): 
    . as $in 
    | if type == "object" then 
     reduce keys[] as $key 
     ({}; . + { ($key): ($in[$key] | walk(f)) }) | f 
    elif type == "array" then map(walk(f)) | f 
    else f 
    end; 

walk(if type == "object" then del(.source) else . end) 

Lauf kopieren

$ jq -f hoo.jq < YOUR_JSON.json 

Referenz: recursive reduce arrays using jq

+0

ich eine hoo.jq Datei erstellt und Befehl ausführen. Aber ich habe einen Kompilierfehler 'Fehler: Syntaxfehler, unerwarteter INVALID_CHARACTER'. Wie kann ich es lösen? Vielen Dank –

0

Hier ist eine andere Lösung

del(.b[].source)