如何在Bash脚本中向JSON数组插入不存在的指定元素?
在Bash中用jq检查并插入JSON数组元素
直接用jq工具就能优雅解决这个问题,无需用Bash循环解析JSON(易出错)。以下是完整实现:
核心脚本
#!/bin/bash # 定义要添加的菜品 order="lasagna" # 检查并更新JSON数组:存在则不操作,不存在则追加到末尾 jq --arg new_item "$order" \ '.foods.menu |= if index($new_item) then . else . + [$new_item] end' \ response.json > temp.json && mv temp.json response.json
命令解析
--arg new_item "$order":将Bash变量order的值传入jq,命名为new_item,避免字符串转义问题.foods.menu |=:定位到JSON中foods下的menu数组,|=是jq的更新操作符,将后续处理结果赋值给该数组if index($new_item) then . else . + [$new_item] end:index($new_item):检查数组中是否存在目标元素,存在则返回其索引,不存在返回null- 存在时直接保留原数组(
.表示当前值),不存在则将新元素追加到数组末尾(. + [$new_item])
- 临时文件过渡:jq不支持直接修改原文件,用临时文件避免操作失败损坏原数据
扩展说明
- 若要将新元素添加到数组开头,只需把
. + [$new_item]改为[$new_item] + . - 该命令天然支持去重,重复执行同一
order值不会重复添加元素
内容的提问来源于stack exchange,提问作者phoeneous
相关产品推荐
相关产品推荐

