jq命令打印json两次而不是一次



我需要在JSON文件中使用jq命令设置一些新值。下面是一个file.json

的例子
{

"Balise1": true,
"Balise2": true,
"OtherThingEnabled": false,
"proxySettings": {
"port": 0
},
"mailSettings": {},
"maxRunningActivitiesPerJob": 5,
"maxRunningActivities": 5,
}
为了设置proxySettings值,我使用以下命令

jq --arg host "proxy.hub.gcp.url.com" --arg port "80" '.proxySettings = { host: $host, port: $port }' file.json

不打印修改后的文件版本。Json,它会打印原始版本和修改后的版本,如下所示:

{

"Balise1": true,
"Balise2": true,
"OtherThingEnabled": false,
"proxySettings": {
"port": 0
},
"mailSettings": {},
"maxRunningActivitiesPerJob": 5,
"maxRunningActivities": 5,
}
{

"Balise1": true,
"Balise2": true,
"OtherThingEnabled": false,
"proxySettings": {
"host": "proxy.hub.gcp.url.com"
"port": "80"
},
"mailSettings": {},
"maxRunningActivitiesPerJob": 5,
"maxRunningActivities": 5,
}

我想只打印修改后的版本。如何仅使用修改后的版本创建新的JSON文件?

逗号,向两个过滤器提供相同的输入,因此., .这样的程序将输出两次输入。

如果两个过滤器用逗号分隔,那么相同的输入将被馈送到两个过滤器中,并且两个过滤器的输出价值流将按顺序连接:首先,左边表达式产生的所有输出,然后是右边表达式产生的所有输出。例如,filter .foo, .bar,会产生"foo"Fields和"bar"字段作为单独的输出

演示:

echo '"foobar"' | jq 'length, length'
6
6

相反,您希望用管道过滤器|顺序地组合两个过滤器,因为普通赋值操作符=输出其修改后的输入。

jq --arg host "proxy.hub.gcp.url.com" 
--arg port "80" 
'.proxySettings = { host: $host, port: $port } | .mailSettings = {value1: "Value1"}'

你最初的问题没有包括完整的jq程序(所以它缺少一个适当的最小可重复的例子!),只有你的自我回答包含了关键的细节。

我发现了这个问题。在我的shell中,我在同一个命令上修改了2个东西,像这样:

jq --arg host "proxy.hub.gcp.url.com" --arg port "80" '.proxySettings = { host: $host, port: $port }, .mailSettings = '{value1: "Value1"}' file.json

命令打印第一个更改,然后是第二个。我必须创建两个单独的jq命令。

最新更新