die folgenden JSON-Datei foo.js (abgespeckte für Klarheit) Gegeben:JQ Mit einem Wert mit einem anderen Wert aus demselben Wörterbuch ersetzen
{"a":{"b":[{"x":{"x1":1},"y":{"y1":5}},{"x":{"x1":1},"y":{"y1":6}}]}}
ich den Wert von x1 mit dem entsprechenden Wert ersetzt werden soll von y1. Das heißt, ich möchte am Ende mit:
{"a":{"b":[{"x":{"x1":5},"y":{"y1":5}},{"x":{"x1":6},"y":{"y1":6}}]}}
Diese Werte ersetzt, sondern gibt nur die modifizierten Wörterbücher anstatt die vollständige JSON-Datei:
% jq -Mc '.a.b[] | .x.x1 = .y.y1' foo.js
{"x":{"x1":5},"y":{"y1":5}}
{"x":{"x1":6},"y":{"y1":6}}
Dies funktioniert x1 mit einer Konstante ersetzen Wert:
% jq -Mc '(.a.b[] | .x.x1) |= 9' foo.js
{"a":{"b":[{"x":{"x1":9},"y":{"y1":5}},{"x":{"x1":9},"y":{"y1":6}}]}}
Aber dieser Versuch die gleiche Idee zu verwenden, funktioniert nicht:
% jq -Mc '(.a.b[] | .x.x1) |= .y.y1' foo.js
jq: error (at foo.js:1): Cannot index number with string "y"
Perfect, dank nimmt. Jetzt, um es wieder in die echte Datendatei zu stecken. –