Jq
jq 追加數據並保留其餘數據
我正在嘗試使用 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