如何在Bash中为JSON数组动态添加多组键值对
用Bash向JSON数组追加元素的可行方案
嘿,这个需求太常见了!咱直接用jq工具就能完美解决——这是处理JSON的Bash神器,几乎所有主流Linux发行版都能通过包管理器轻松安装。下面给你两种实用的实现方式,按需选择:
前提:安装jq
先确保你的系统上有jq:
- Debian/Ubuntu系:
sudo apt install jq - RHEL/CentOS/Fedora系:
sudo dnf install jq
方法1:一次性批量追加多个元素(推荐)
如果要同时追加两组键值对,直接一次操作最高效。假设你的原JSON文件名为ips.json,执行以下命令:
jq '. += [ {"entry": "10.20.17.0/24", "comment": "test ip3"}, {"entry": "10.20.18.0/24", "comment": "test ip4"} ]' ips.json > temp.json && mv temp.json ips.json
命令解释:
. += [...]:这是jq的核心语法,意思是把括号内的新数组元素追加到原数组的末尾- 用临时文件
temp.json中转是因为jq不能直接修改原文件,最后用mv替换原文件完成修改
方法2:用sponge简化文件替换(更省心)
如果你觉得临时文件麻烦,可以安装moreutils包中的sponge工具,它会先读取所有输入再写入目标文件,避免直接读写的冲突:
# 先安装moreutils sudo apt install moreutils # 一次性追加元素 jq '. += [ {"entry": "10.20.17.0/24", "comment": "test ip3"}, {"entry": "10.20.18.0/24", "comment": "test ip4"} ]' ips.json | sponge ips.json
验证结果
执行完命令后,你可以用以下命令查看格式化后的结果,确保符合预期:
jq . ips.json
参考数据
原JSON数组文件内容:
[ { "entry": "10.20.15.0/24", "comment": "test ip1" }, { "entry": "10.20.16.0/24", "comment": "test ip2" } ]
待追加的两组键值对:
{ "entry": "10.20.17.0/24", "comment": "test ip3" }, { "entry": "10.20.18.0/24", "comment": "test ip4" }
期望得到的最终JSON数组:
[ { "entry": "10.20.15.0/24", "comment": "test ip1" }, { "entry": "10.20.16.0/24", "comment": "test ip2" }, { "entry": "10.20.17.0/24", "comment": "test ip3" }, { "entry": "10.20.18.0/24", "comment": "test ip4" } ]
内容的提问来源于stack exchange,提问作者akhinair
相关产品推荐
相关产品推荐

