web-dev-qa-db-ja.com

jqを使用してjsonドキュメントの単一の値を更新するにはどうすればよいですか?

非常に明白な何かを見落とした場合の謝罪。私はjqを見つけましたが、それを使用して、周囲のデータに影響を与えずに1つのJSON値を更新しようとしています。

curlの結果をjqにパイプし、値を更新し、更新したJSONをcurl -X PUTにパイプします。何かのようなもの

curl http://example.com/shipping.json | jq '.' field: value | curl -X PUT http://example.com/shipping.json

これまでsedを使用して一緒にハッキングしましたが、jq|=演算子のいくつかの例を見て、これらは必要ないと確信しています。

JSONのサンプルは次のとおりです。JSONの残りを保持しながら、jqを使用して"local": falseを設定するにはどうすればよいですか。

{
  "shipping": {
    "local": true,
    "us": true,
    "us_rate": {
      "amount": "0.00",
      "currency": "USD",
      "symbol": "$"
    }
  }
}
71
STW

=演算子を使用してオブジェクトの値を設定します。一方、|=は値の更新に使用されます。微妙ですが重要な違いです。フィルターのコンテキストが変更されます。

プロパティを定数値に設定しているため、=演算子を使用します。

.shipping.local = false

プロパティに値を設定する場合、必ずしも存在する必要はないことに注意してください。この方法で新しい値を簡単に追加できます。

.shipping.local = false | .shipping.canada = false | .shipping.mexico = true
91
Jeff Mercado