jq は複数の --arg を使用して値を追加または更新します。

jq は複数の --arg を使用して値を追加または更新します。

私のfile.json構造は次のとおりです。

{
  "connections": {}
}

$1変数を使用して接続オブジェクトを更新したいです$2。私の考えでは:

jq --arg ssid "$1" --arg pass "$2" '.connections.$ssid = "$pass"' file.json > tmp.json && mv tmp.json file.json

しかし、私は戻ってきました。jq: error: syntax error, unexpected '$', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1: .connections.$ssid = "$pass"

私はscript.sh value key次のものを生産すると予想しています。

{
  "connections": {key:"value"}
}

複数のパラメータを使用してオブジェクトを更新する方法

ベストアンサー1

使用する必要があります[]索引変数(またはリテラルではないもの)をキーとして使用します。

jq --arg ssid abc --arg pass 123 '.connections[$ssid] = $pass' < file.json
{
  "connections": {
    "abc": "123"
  }
}

ここで、値はインデックス付けのキーとして使用されます[$ssid]。エラーは ""で発生します。これは構文エラーであり、複数の変数とは関係ありません。.connections$ssid.$

変わりやすいシェルスクリプトのように文字列を直接置き換えることはできませんが、式のコンテキストで使用する必要がある実際の名前付き語彙バインディングがあります。インデックスはより複雑な式にすることができます。.connections[$ssid + "X"] = $passまず、最後にXを入れてキーとして使用します。

おすすめ記事