我有一个bash脚本,并且我正在try 基于JSON响应执行命令.

我可以返回3种类型的响应,并存储在content变量中:

第一种类型(repo不存在):

{
    "message": "The repo doesn't exist"
}

第二种类型(回购存在,但没有内容):

[
    {
        "name": ".dotfile"
    },
    {
        "name": ".anotherdotfile"
    },
    {
        "name": "README.md"
    },
]

第三种类型(存在回购且有内容):

[
    {
        "name": ".dotfile"
    },
    {
        "name": ".anotherdotfile"
    },
    {
        "name": "README.md"
    },
    {
        "name": "myscript.sh"
    },
    {
        "name": "anotherscript.sh"
    },
    {
        "name": "anotherfile.sh"
    },
]

在我的脚本中,我有如下循环:

#/bin/bash

for repo_name in "${repos_name[@]}"; do
    content=$(curl -s http://example.com/$repo_name)
    
    # Here I would like to check if the response is of the 3rd type.
    # So, if it's an array with at least 1 object with value's name
    # which not start from "." or equal to "README.md".
    # In that case I would perform a command

done

基本上,我想判断是否存在一个repo,它有一些除了点文件和README的内容.

我试着使用jq工具,但我不知道如何正确过滤内容来执行判断.

我如何才能达到这样的结果呢?

推荐答案

在前两次输入的情况下,它的值将为false,而在第三次输入时,它的值将为true.如果您的"命令"位于JQ内部,则将其用作ifselect表达式中的条件.否则,您可以使用JQ的--exit-status(或-e)标志将其退出状态设置为10,您可以通过将$?赋给变量或直接在if语句中使用调用来在调用的shell 中捕获和处理这些状态.

any(arrays[]; .name | . == "README.md" or startswith(".") | not)

Demo

Json相关问答推荐

Google Page to JSON应用程序脚本出现CORS错误

JSON:将项';S键/名称移动到属性中,并使用JQ将其转换为数组

如何使用JQ打印每个根级对象键一行?

如何在Android中解析带有动态键和可变对象名称的改装JSON响应?

将不带正文的 CURL POST 转换为 RESTRequest Delphi 代码 / 为 Dropbox API /get_current_account 端点编写 Delphi 代码

将 json 转换为 jsonb 安全吗?

使用 jq 和 awk 拆分大型 JSON 文件

如何在循环中传递列表(会话(字符串属性))以在 Gatling Scala 中创建批量 Json 请求

使用 ConvertFrom-Json 后,Powershell 访问 JSON 中的嵌套对象

使用 Ansible 解析来自 Juniper 交换机的 JSON 输出

Flutter:在本地文件 json 中搜索特殊的阿拉伯字符

无法向 Json 数组添加新元素

Rails:format.js 或 format.json,或两者兼而有之?

如何获取json格式的KendoGrid显示数据?

使用 simplejson 序列化简单类对象的最简单方法?

什么 Python 框架用于没有前端的 REST/JSON Web 服务?

如何使用 Jackson 重命名 JSON 序列化中的根键

JSON.stringify 不会转义?

未调用 npm package.json 脚本

Microsoft.Net.Http 与 Microsoft.AspNet.WebApi.Client