我正在尝试使用 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