Ich möchte mit jq ein Array mit Elementen und Wert in eine vorhandene JSON-Datei einfügen.
Ich habe bereits eine Datei (input.json) mit
{
"id": 9,
"version": 0,
"lastUpdTs": 1532371267968,
"name": "Training"
}
Ich möchte dies in ein anderes Gruppenarray in diesem json (orig.json) hinzufügen.
[
{
"name": "JAYS",
"sourceConnection": {
"name": "ORACLE_connection",
"connectionType": "JDBC",
"commProtocol": "JDBC"
},
"checked": true,
"newlyAdded": false,
"id": null,
"groups": [],
"displayName": "SCOTT",
"defaultLevel": "MANAGED"
}
]
Das Endergebnis sollte so aussehen
[
{
"name": "JAYS",
"sourceConnection": {
"name": "ORACLE_connection",
"connectionType": "JDBC",
"commProtocol": "JDBC"
},
"checked": true,
"newlyAdded": false,
"id": null,
"groups": [
{
"id": 9,
"version": 0,
"lastUpdTs": 1532371267968,
"name": "Training"
}
],
"displayName": "SCOTT",
"defaultLevel": "MANAGED"
}
]
Ich weiß, wie man einem Array Elemente hinzufügt, bin mir aber nicht sicher, wie ich aus einer Datei übergeben soll.
jq '.[].groups += [{"INPUT": "HERE"}]' ./orig.json
$(<file)
eine ksh / bash / zsh-Erweiterung ist und ansonsten nicht portabel ist. Sie könntencat
stattdessen verwenden.Dies ist der genaue Fall, für den die
input
Funktion bestimmt ist:Das heißt,
jq
liest ein Objekt / einen Wert aus der Datei ein und führt die Pipeline darauf aus, und überall dort, wo esinput
erscheint, wird die nächste Eingabe eingelesen und als Ergebnis der Funktion verwendet.Das heißt, Sie können:
mit genau dem Befehl, den Sie bereits geschrieben haben, plus
input
als Wert. Derinput
Ausdruck wertet das (erste) Objekt aus, das aus der nächsten Datei in der Argumentliste gelesen wurde, in diesem Fall den gesamten Inhalt voninput.json
.Wenn Sie mehrere Elemente einfügen müssen, können Sie diese
inputs
stattdessen mit derselben Bedeutung verwenden. Es wird über die Befehlszeile gleichermaßen auf eine oder mehrere Dateien angewendet und[inputs]
repräsentiert alle Dateikörper als Array.Es ist auch möglich, Dinge zu verschachteln, um mehrere
orig
Dateien mit jeweils einer eingefügten Begleitdatei zu verarbeiten , aber das Trennen der Ausgaben wäre mühsam.quelle
--arg
kann ich machen :jq --arg "$(<1.txt)" '{file: $file}'
.file=$(curl ...)
) abgerufen . In diesem Fall gibt es wahrscheinlich keine Möglichkeit, dieinput
Funktion zu verwenden .<(echo "$file")
funktioniert nicht