Вы можете использовать функцию select
, например:
data='[{"id":100000004,"name":"Customs Clearance Requested"},{"id":100000005,"name":"Customs Cleared"},{"id":100000006,"name":"Cargo Loaded to Vessel"}]'
jq 'map(select(.["name"] == "Customs Clearance Requested"))' <<< $data
Она получит все элементы, которым name равно "Customs Clearance Requested"
, например:
[
{
"id": 100000004,
"name": "Customs Clearance Requested"
}
]
Если вы хотите получить поле id :
jq 'map(select(.["name"] == "Customs Clearance Requested")["id"])' <<< $data
Это выдаст:
[
100000004
]
Обратите внимание, что оно будет вернуть массив , а не один элемент, потому что поиск не знает, сколько результатов будет найдено.
Если вы хотите обобщить это в функции оболочки, вы можете написать:
function get_id_from_name
{
# $1=name to search for
local filter=$(printf 'map(select(.["name"] == "%s")["id"])' "$1")
jq "$filter"
}
Затем назовите это так:
get_id_from_name "Customs Clearance Requested" <<< $data
Если ваши данные хранятся в файле, вы можете назвать это так:
get_id_from_name "Customs Clearance Requested" < /path/to/file.json