我得到了一长串这样的数组
{
"id": "byu6g6c4cjys5mdkg5znh8ju8c",
"create_at": 1511875272294,
"update_at": 1511875272294,
"delete_at": 0,
"display_name": "BMA",
"name": "BMA",
"description": "",
"email": "[email protected]",
"type": "O",
"company_name": "",
"allowed_domains": "",
"invite_id": "gdgz1tbxuinntx1fbr1ax7kehy",
"allow_open_invite": false,
"scheme_id": null
}
我只想通过 JQ 获取名称为 BMA 的 ID。目前我解析“ jq -r '.[][“name”]”,我可以按名称过滤curl的输出,我将得到“BMA”以及100个其他名称,但我只需要过滤ID其中名称为 =BMA。有任何想法吗?
答案1
杰克
您应该能够通过以下方式完成此任务:
jq '.[] | select( .name == "BMA" ).id'
如果 name 是,BMA
它将提取并输出相应的.id
.
要使用 shell 变量的值,请将其导入jq
到--arg
:
myvariable=BMA
jq --arg name "$myvariable" '.[] | select( .name == $name ).id'
json -c 'this.name === "BMA"' -a id
答案2
jq 解决方案的替代方案是jtc
:
bash $ jtc -w'[name]:<BMA>+0 [-1] [id]' input.json
"byu6g6c4cjys5mdkg5znh8ju8c"
bash $
答案3
使用磨坊主( mlr
),首先从较大的数组中提取相关条目(等于 的条目name
)BMA
,然后id
从所选条目中提取字段:
mlr --j2n filter '$name == "BMA"' then cut -f id file
该--j2n
选项告诉mlr
调用读取 JSON 并生成“索引/工具包”输出(本质上只是数据)。
byu6g6c4cjys5mdkg5znh8ju8c
给定一个包含问题文本中包含对象的 JSON 数组的文件,这将在一行上输出单个字符串。