JQ(根据NAME获取ID)

JQ(根据NAME获取ID)

我得到了一长串这样的数组

{
    "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

json -c 'this.name === "BMA"' -a id

答案2

jq 解决方案的替代方案是jtc:

bash $ jtc -w'[name]:<BMA>+0 [-1] [id]' input.json
"byu6g6c4cjys5mdkg5znh8ju8c"
bash $ 

答案3

使用磨坊主( mlr),首先从较大的数组中提取相关条目(等于 的条目nameBMA,然后id从所选条目中提取字段:

mlr --j2n filter '$name == "BMA"' then cut -f id file

--j2n选项告诉mlr调用读取 JSON 并生成“索引/工具包”输出(本质上只是数据)。

byu6g6c4cjys5mdkg5znh8ju8c给定一个包含问题文本中包含对象的 JSON 数组的文件,这将在一行上输出单个字符串。

相关内容