jq 附加数据并保留其余数据

jq 附加数据并保留其余数据

我正在尝试使用 jq 向数组添加一个值并保留其余内容:

   "access":{
      "allowed_users":[
         "admin",
         "test",
      ],

以上就是我想补充的内容。如果我使用jq '.access.allowed_users + [ "test2" ]'它将在那里添加一个新条目,但文件的其余部分会丢失,因此我无法再次重新创建配置文件。

答案1

假设您的意思是要附加您显示的 JSON 以及 JSON 文档格式良好,

$ cat file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test"
    ]
  }
}

你可以做

$ jq '.access.allowed_users += ["test32"]' file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test",
      "test32"
    ]
  }
}

它使用 向+=数组分配一个新元素来添加到数组中。

在 shell 变量中使用新值:

$ data='My "awesome" data'
$ jq --arg value "$data" '.access.allowed_users += [$value]' file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test",
      "My \"awesome\" data"
    ]
  }
}

要一次性添加多个条目,最简单的方法是使用以下命令添加它们--args

$ jq '.access.allowed_users += $ARGS.positional' file.json --args Bilbo Frodo Sam Merry Pippin
{
  "access": {
    "allowed_users": [
      "admin",
      "test",
      "Bilbo",
      "Frodo",
      "Sam",
      "Merry",
      "Pippin"
    ]
  }
}

请注意--args,该选项的后续参数必须是命令行上的最后一个参数。

要对文件进行这些更改,请使用临时文件:

jq ...one-of-the-above-approaches... >tmp.json &&
mv tmp.json file.json

如果由于某种原因失败,这&&可以防止原始文件被覆盖。jq

相关内容