2017-04-03 2 views
3

Mit jq ich versuchte, dieses json Dokument zu aktualisieren:Wie aktualisiert man einen Unterpunkt in einer JSON-Datei mit jq?

{ 
"git_defaults": { 
    "branch": "master", 
    "email": "[email protected]", 
    "user": "Jenkins" 
}, 
"git_namespaces": [ 
{ 
    "name": "NamespaceX", 
     "modules": [ 
      "moduleA", 
      "moduleB", 
      "moduleC", 
      "moduleD" 
     ] 
}, 
{ 
    "name": "NamespaceY", 
    "modules": [ 
     "moduleE" 
    ] 
} 
] 
} 

mit moduleF-NamespaceY hinzufügen. Ich muss die Datei wieder in die ursprüngliche Quelldatei schreiben.

Ich kam in der Nähe (aber keine Zigarre) mit:

jq '. | .git_namespaces[] | select(.name=="namespaceY").modules |= (.+ ["moduleF"])' config.json 

und

jq '. | select(.git_namespaces[].name=="namespaceY").modules |= (.+ ["moduleF"])' config.json 

Antwort

1

Der folgende Filter sollten das Update Sie ausführen:

(.git_namespaces[] | select(.name=="NamespaceY").modules) += ["moduleF"] 

Beachten Sie, dass die Anfangs '. |' in Ihrem Versuch wird nicht benötigt; dass "NamespaceY" in config.json groß geschrieben wird; dass die abgebildeten Paren die Schlüssel zum Erfolg sind; und das + = kann hier verwendet werden.

Eine Möglichkeit, zurück in die ursprüngliche Datei zu schreiben, wäre vielleicht, 'Schwamm' zu verwenden; andere Möglichkeiten werden auf der jq FAQ https://github.com/stedolan/jq/wiki/FAQ

+0

diskutiert Ich nahm es ein kleines bisschen weiter: (.git_namespaces [] | auswählen (.name == "NamespaceY"). Module) | = (. + ["modulF"] | unique) um sicherzustellen, dass es nicht zu doppelten Einträgen kommt – MansM

Verwandte Themen