使用jq命令修改JSON重复输出问题及新文件生成方法
解决jq输出原始+修改后JSON的问题
问题原因
你的file.json最后一行"maxRunningActivities": 5,末尾多了一个逗号,这属于无效JSON语法。jq会将这种错误解析为两个JSON对象(逗号前后各一个),所以执行命令后会同时输出原始和修改后的两个结果。
解决方案
步骤1:修复原始JSON的语法错误
打开file.json,删除"maxRunningActivities": 5,末尾的逗号,修正后内容如下:
{ "Balise1": true, "Balise2": true, "OtherThingEnabled": false, "proxySettings": { "port": 0 }, "mailSettings": {}, "maxRunningActivitiesPerJob": 5, "maxRunningActivities": 5 }
步骤2:执行正确的jq命令并生成新文件
使用重定向符号>将修改后的内容写入新文件(比如updated_file.json),命令如下:
jq --arg host "proxy.hub.gcp.url.com" --arg port "80" '.proxySettings = { host: $host, port: ($port | tonumber) }' file.json > updated_file.json
注意:这里加了
($port | tonumber)是因为原始port是数字类型,而--arg传递的是字符串,转成数字能保持JSON类型一致,避免类型不匹配问题。
可选:直接覆盖原文件(谨慎操作)
如果想直接修改原文件,可使用sponge工具(需先安装moreutils包),避免重定向导致的文件提前清空问题:
jq --arg host "proxy.hub.gcp.url.com" --arg port "80" '.proxySettings = { host: $host, port: ($port | tonumber) }' file.json | sponge file.json
内容的提问来源于stack exchange,提问作者Raph04
相关产品推荐
相关产品推荐

