json 使用jq根据object中的键值查找对象

bz4sfanl  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(168)

从下面的json change_tasks数组中,当key:value与“short_description”完全匹配时,我想只提取key“description”的值:“01.项目审定”。

{
    "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中根据另一个值列表检查它们。

6ss1mwsb

6ss1mwsb1#

您可以用途:

$ 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)
wpcxdonn

wpcxdonn2#

我最后还是自己整理成这样

#!/bin/sh

variable=$(jq -r '.change_tasks[] | select(.short_description=="01. Project validation").description' test.json)

for i in ${variable//,/ }
do
    # call your procedure/other scripts here below
    echo "$i"
done

相关问题