将键/值添加到 json 对象

将键/值添加到 json 对象

我有一个 json 对象存储在 shell 变量中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

相关内容