Entschuldigung, wenn ich etwas sehr Offensichtliches übersehen habe; Ich habe gerade gefundenjq
und versuche, damit einen JSON-Wert zu aktualisieren, ohne die umgebenden Daten zu beeinflussen.
Ich möchte ein curl
Ergebnis in jq
einen Wert weiterleiten, einen Wert aktualisieren und den aktualisierten JSON an einen weiterleiten curl -X PUT
. Etwas wie
curl http://example.com/shipping.json | jq '.' field: value | curl -X PUT http://example.com/shipping.json
Bisher habe ich es zusammen mit gehackt sed
, aber nachdem ich mir einige Beispiele des |=
Operators angesehen jq
habe, bin ich mir sicher, dass ich diese nicht brauche.
Hier ist ein JSON-Beispiel - wie würde ich jq
es festlegen "local": false
, während der Rest des JSON erhalten bleibt?
{
"shipping": {
"local": true,
"us": true,
"us_rate": {
"amount": "0.00",
"currency": "USD",
"symbol": "$"
}
}
}
"
, z.shipping.local = "new place"
. So wird der ganze Befehl seincurl http://example.com/shipping.json | jq '.shipping.local = "new place"'
. Andernfalls erhalten Sie seltsame Fehler.false
. Werte müssen keine Zeichenfolgen sein.false
. Was ist los mit dir?Aktualisieren Sie einen Wert (setzt .foo.bar auf "neuer Wert"):
Aktualisieren Sie einen Wert mithilfe einer Variablen (setzt .foo.bar auf "Hallo"):
quelle
Eine ähnliche Funktion wie der Operator | = ist map. map ist geeignet, um die Notwendigkeit eines vorherigen Filters für das Array zu vermeiden ...
Stellen Sie sich vor, Ihre Daten sind ein Array (in diesem Beispiel sehr häufig).
Daher ist es notwendig, das Array im Code wie folgt zu betrachten:
oder um die Kartenfunktion zu verwenden, die so gestaltet ist, dass sie in jedem Array-Element als funktioniert
Überwachung
Für diejenigen, die lernen, haben Sie auch einige Fehler in der jq-Verwendung gemacht. Denken Sie nur daran, dass der 1. Parameter als Programm "gelesen" wird. Daher müssen alle gewünschten Befehle nach dem Aufruf von in die allererste Zeichenfolge aufgenommen werden Programm.
quelle