我正在构建一个bash脚本,该脚本将从API读取响应,并在[]列表(而不是{}数组)中插入一个值(如果值不存在).接口返回假例:

#response.json contains:

{
    "foods": {
        "menu": [
            "tacos",
            "spaghetti",
            "pizza",
            "chicken_florentine",
            "bacon_cheeseburge",
            "chow_mein",
            "sushi",
            "chocolate",
            "whiskey"
        ]
    }
}

我的bash脚本中的变量是order="lasagna".如果'foods.menu[]'包含$order,则不执行任何操作,否则将$order值插入'foods.menu[]'.

使用'foods.menu[]'中当前不存在的bash变量order="lasagna",得到的json应该是:

{
    "foods": {
        "menu": [
            "tacos",
            "spaghetti",
            "pizza",
            "chicken_florentine",
            "bacon_cheeseburge",
            "chow_mein",
            "sushi",
            "chocolate",
            "whiskey",
            "lasagna" <----
        ]
    }
}

一开始,我try 了bash for循环以及JQ的if-then-elseselectcontains的变种,但都失败了.如有任何帮助,我们不胜感激.

推荐答案

你不需要一个循环就可以了

jq --arg order lasagna '.foods.menu |= if index($order) then . else . + [$order] end' response.json

但您可能需要一个来插入多个订单

jq 'reduce $ARGS.positional[] as $order (.;
  .foods.menu |= if index($order) then . else . + [$order] end
)' response.json --args apple banana sushi

Json相关问答推荐

输入请求中不存在null的条件抖动

如何将文件夹组织的.json文件合并为一个JSON文件,文件夹/文件名作为键

使用快速json库编写json可以消除所有缩进

从 oracle 数据库中的 json blob 打印值

JOLT 获取带有动态键的数组

无法在Kotlin 中解析JSONObject

从 JSON 响应中获取最新版本发布字段

如果 JSON 对象包含列表中的子字符串,则丢弃它们

如何为包含一些固定值并可能具有其他附加值的数组字符串创建数组 json 架构

序列化为json时如何忽略空列表?

使用 Javascript 判断 JSON 对象是否包含值

如何对使用转换器的 Grails 服务进行单元测试?

应该使用什么标头将 GZIP 压缩 JSON 从 Android 客户端发送到服务器?

在 JSON API Wordpress 上启用 CORS

使用 c# 通用地展平 Json

jQuery fullcalendar 发送自定义参数并使用 JSON 刷新日历

如何向(JSON)对象的原型添加方法?

从调试器获取 IntelliJ Idea 中的 JSON 对象

Java HashMap 与 JSONObject

play 2 JSON 格式中缺少的属性的默认值