我需要在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命令。