我使用以下curl命令:
curl -s -v --user admin:orca --insecure -X GET https://insecure.registry.com/api/v0/repositories/authi-api/tags
获得以下输出:
{
"name": "Dev_ReleaseRollout_Lane-3",
"inRegistry": true,
"hashMismatch": false,
"inNotary": false
},
{
"name": "Dev_ReleaseRollout_Lane-latest",
"inRegistry": true,
"hashMismatch": false,
"inNotary": false
},
{
"name": "Payments_Dev_Lane-267",
"inRegistry": true,
"hashMismatch": false,
"inNotary": false
}
我想在变量中只获得name
个值
我只需要变量
Dev_ReleaseRollout_Lane-3
Dev_ReleaseRollout_Lane-latest
Payments_Dev_Lane-267
答案 0 :(得分:1)
假设你实际上有三个对象的数组:
$ curl ... | jq -r '.[].name'
Dev_ReleaseRollout_Lane-3
Dev_ReleaseRollout_Lane-latest
Payments_Dev_Lane-267
这很简单,.
是数组,[].name
取名数中每个元素的名称。 -r
是原始输出。
--raw-output / -r:
使用此选项,如果过滤器的结果是字符串,则它将直接写入标准输出,而不是格式化为带引号的JSON字符串。这对于使jq过滤器与非基于JSON的系统进行通信非常有用。
如果cURL输出实际上如上所述,则以下内容将起作用:
jq -rRs '"[\(.)]" | fromjson[].name' file.json
但是我认为有一种更好的方法来围绕输入包装数组,
-R
是原始输入,-s
是傻瓜。 \(...)
为string interpolation。
--slurp/-s:
不是为输入中的每个JSON对象运行过滤器,而是将整个输入流读入一个大型数组并仅运行一次过滤器。