Jq

jq 追加數據並保留其餘數據

  • January 3, 2020

我正在嘗試使用 jq 向數組添加一個值並保留其餘內容:

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

以上是我要附加的內容。如果我使用jq '.access.allowed_users + [ "test2" ]'它將在那裡添加一個新條目,但文件的其餘部分會失去,因此我無法再次重新創建配置文件。

假設您的意思是要附加您顯示的 JSON,並且 JSON 文件格式正確,

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

你可以做

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

這幾乎直接取自jq手冊,來自標題為“複雜分配”的部分。它使用|=“修改運算符”通過為其分配一個新元素來修改數組。

在 shell 變數中使用新值:

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

要對您的文件進行這些更改,請使用臨時文件:

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

如果由於某種原因失敗,&&則可以防止原始文件被覆蓋。jq

引用自:https://unix.stackexchange.com/questions/560100