我需要用我已經擁有的變數替換“JaegerAgentHost”的值。
我在每個應用程式上都有多種格式的 JSON。
APP1 JSON 檔案:
{
"Settings": {
"JaegerServiceSettings": {
"JaegerAgentHost": "jaeger.apps.internal",
"JaegerAgentPort": "6831"
} } }
APP2 JSON 檔案:
{
"JaegerServiceSettings": {
"JaegerAgentHost": "jaeger.apps.internal",
"JaegerAgentPort": "6831",
} }
App3 JSON 檔案:
{
"JaegerAgentHost": "jaeger.apps.internal",
"JaegerAgentPort": "6831"
}
無論 JaegerAgentHost 的鍵值路徑如何,我都應該能夠用我的變數替換它的值,最終應該如下所示
預期輸出::
APP1 JSON 檔案:
{
"Settings": {
"JaegerServiceSettings": {
"JaegerAgentHost": "jaeger.app",
"JaegerAgentPort": "6831"
} } }
APP2 JSON 檔案:
{
"JaegerServiceSettings": {
"JaegerAgentHost": "jaeger.app",
"JaegerAgentPort": "6831",
}}
App3 JSON 檔案:
{
"JaegerAgentHost": "jaeger.app",
"JaegerAgentPort": "6831"
}
當我有多個 JSON 檔案喜歡用 jq 和 bash 查找和替換特定的鍵值時,請建議我們如何做到這一點
到目前為止,我對每個要替換的 json 檔案都有多個命令,這不是最佳實踐。
這使我無法為所有人制作通用腳本。
我可以使用 sed,但擔心任何 JSON 檔案可能發生的結構更改,因為它們不統一并且希望更喜歡 jq。
uj5u.com熱心網友回復:
一種方法是使用walk.
假設 $host 持有所需的值,jq 過濾器將是:
walk(if type == "object" and has("JaegerAgentHost")
then .JaegerAgentHost = $host else . end)
另一種方法是使用..and |=:
(..|objects|select(.JaegerAgentHost).JaegerAgentHost) |= $host
--arg您可以使用命令列選項傳入值,例如
jq --arg host jaeger.app .....
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/448550.html
上一篇:字典到JSONfor回圈
