jsonオブジェクトにキー/値を追加する

jsonオブジェクトにキー/値を追加する

シェル変数にjsonオブジェクトが格納されていますjson

{
    "name": "foo",
    "array": [
        {
            "name": "bar",
            "thing": true
        },
        {
            "name": "baz",
            "thing": false
        }
    ]
}

.new_key私はarray次のことができます:

$ jq '.array[] + {"new_key": 0}' <<<"$json"
{
  "name": "bar",
  "thing": true,
  "new_key": 0
}
{
  "name": "baz",
  "thing": false,
  "new_key": 0
}

ただし、これはオブジェクト全体ではなく配列の配列のみを返します。変数をその場で変更したり、オブジェクト全体を返すにはどうすればよいですか?

答え1

$ jq '.array[] += { new_key: 0 }' <<<"$json"
{
  "name": "foo",
  "array": [
    {
      "name": "bar",
      "thing": true,
      "new_key": 0
    },
    {
      "name": "baz",
      "thing": false,
      "new_key": 0
    }
  ]
}

つまり、配列を抽出して追加するのでは+=なく+、修正したいのです。

または、式のキーをハードコードするには、jqコマンドラインに値を渡します。

jq --argjson newval "$somevalue" '.array[] += { new_key: $newval }' <<<"$json"

または、より簡潔に、以下を使用してください$ARGS.named

jq --argjson new_key "$somevalue" '.array[] += $ARGS.named' <<<"$json"

追加する値が文字列の場合は、--argjsonjust に変更します。--arg

関連情報