从下面的json CHANGE_TASKS数组中,当key:Value与"Short_Description":"01.项目验证"完全匹配时,我只想提取键"Description"的值.

{
    "change_tasks": [{
        "active": "true",
        "approval": "Not Yet Requested", 
        "description": "testing",
        "short_description": "Test description",
        "state": "-5",
        "state_description": "Pending",
        "sys_class_name": "Change Task",
        "sys_created_on": "2023-05-10 15:23:50",
        "sys_updated_on": "2023-05-10 15:25:58",
        "time_worked": "",
        "u_actions_taken_to_prevent_recurrence": "",
        "u_createdby_businessappid": ""
    }, 
    {
        "active": "true",
        "approval": "Not Yet Requested",
        "description": "value-01, value-02",
        "short_description": "01. Project validation",
        "state": "-5",
        "state_description": "Pending",
        "sys_class_name": "Change Task",
        "sys_created_on": "2023-05-10 15:21:01",
        "sys_updated_on": "2023-05-10 15:25:58",
        "time_worked": "",
        "u_actions_taken_to_prevent_recurrence": "",
        "u_createdby_businessappid": ""
    }],
    "responseSummary": {
        "message": "Search successfully executed",
        "code": "200",
        "businessUnit": "unit1",
        "businessAppId": "123456",
        "numRecordsReturned": "2",
        "totalRecords": "2",
        "hasMore": "false"
    }
}

此查询为我提供了正确更改任务的输出,但当"Short_Description"为"01.项目验证"时,我只需要"Description"的值.另外,我想要的更改任务值并不总是[1],它可以是对象列表中的任何值.

$ jq -r .change_tasks[1].short_description test.json
01. Project validation

然后,我需要将"Description"的逗号分隔值转换为变量,以便可以根据bash中的另一个值列表对它们进行判断.

推荐答案

您可以使用:

$ jq -r '.change_tasks[] | select(.short_description == "01. Project validation").description | gsub(",\\s+";",") | split(",") | @sh ' test.json
'value-01' 'value-02'

如果要将其读入两个变量:

function get_values {
    jq -r '.change_tasks[] | select(.short_description == "01. Project validation").description | gsub(",\\s+";",") | split(",") | @sh ' test.json
}

read value1 value2<<<$(get_values)

Json相关问答推荐

时间和日期数据绘制不正确

合并二维数组的Jolt表达式

Jolt Spec 跳过数组中的第一个元素

将 std::可选值存储到 json 文件 C++

使用 jq 如何更改键的值?

将JSON行转换为TSV格式, for each 数组项生成单独的行

jq EOF 处的无效数字文字将 json 值更新为 0.0.x

try 使用 JQ 转换 JSON 中过于复杂的对象数组

Serde JSON 反序列化枚举

jq:来自嵌套 JSON 的映射

使用 json 值过滤 Django 模型

为什么JsonConvert反序列化对象以int但不长失败

为什么在测试 RSPEC 时 JBuilder 不返回 JSON 中的响应正文

如何将 LinkedHashMap 转换为自定义 java 对象?

使用 jq,将对象数组转换为具有命名键的对象

gson:将 null 视为空字符串

与classic 规范化表相比,postgres JSON 索引是否足够高效?

可以在 SharedPreferences 中保存 JSON 数组吗?

未调用 npm package.json 脚本

YAML 将 5e-6 加载为字符串而不是数字