我正在嘗試使用 bash shell 中的 jq 從另一個 json 檔案中的值更新現有的 json 檔案。
我有一個設定 json 檔案
{
"Logging": {
"MinimumLevel": {
"Default": "Information",
"Override": "Warning"
},
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "./logs/log-.txt",
"rollingInterval": "Day"
}
}
]
},
"Settings": {
"DataServerUrl": "https://address.to.server.com",
"ServerKey": "1f969476798adfe95114dd28ed3a3ff"
"ServerTimeZone": "Mountain Standard Time",
"MaxOccupantCount": 6
}
}
在集成步驟中,我試圖從具有有限設定值的外部 json 檔案中合并特定環境的值(想想 dev/staging/prod)。這種檔案的一個例子是
{
"DataServerUrl": "https://dev.server.addr.com",
"ServerKey": "2a4d99233efea456b95114aa23ed342ae"
}
我可以使用 jq 獲取資料。如果我對更新進行硬編碼,我可以使用 jq 更新資料。我正在尋找一些通用的東西來接受任何環境設定值并在基本設定檔案中更新它們。我的搜索表明我可以在不知道具體值的情況下一步完成。類似的命令
jq -r 'to_entries[]' settings.dev.json |
while IFS= read -r key value; do
jq -r '.[$key] |= [$value]' settings.json
done
發生的情況是我收到錯誤訊息說明jq: error: $key is not defined at <top-level>(以及 $value 的相同訊息)。訊息成對出現多次。settings.json 沒有改變。現在,這具有部分意義,因為輸出jq -r 'to_entries[]' settings.dev.json看起來像(此輸出中的空白包含在命令生成的范圍內)。
"key": "DataServerUrl",
"value": "https://dev.server.addr.com"
"key": "ServerKey",
"value": "2a4d99233efea456b95114aa23ed342ae"
如何迭代環境設定檔案中的值,以便我可以使用這些值來更新基本設定檔案以進行進一步處理(即發布到目標環境)?
uj5u.com熱心網友回復:
最簡單的方法是提供兩個檔案并使用input. 這樣,您所需要的只是分配:
jq '.Settings = input' settings.json insert.json
{
"Logging": {
"MinimumLevel": {
"Default": "Information",
"Override": "Warning"
},
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "./logs/log-.txt",
"rollingInterval": "Day"
}
}
]
},
"Settings": {
"DataServerUrl": "https://dev.server.addr.com",
"ServerKey": "2a4d99233efea456b95114aa23ed342ae"
}
}
演示
uj5u.com熱心網友回復:
你可以做類似的事情
jq -s '.[1] as $insert | .[0].Settings |= $insert | .[0]' settings.json insert.json
我們在哪里:
slurp兩個檔案- 保存
insert.json到名為的變數$insert |=將 ( )附加$insert到.[0].Settings- 只顯示第一個檔案
.[0]
所以輸出會變成:
{
"Logging": {
"MinimumLevel": {
"Default": "Information",
"Override": "Warning"
},
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "./logs/log-.txt",
"rollingInterval": "Day"
}
}
]
},
"Settings": {
"DataServerUrl": "https://dev.server.addr.com",
"ServerKey": "2a4d99233efea456b95114aa23ed342ae"
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/479324.html
