【问题标题】:How to retrieve "name" value from json using bash?如何使用 bash 从 json 中检索“名称”值?
【发布时间】:2016-10-15 20:14:07
【问题描述】:

我正在使用以下 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 在变量中

【问题讨论】:

  • 到目前为止你尝试了哪些命令,它们输出了什么?
  • 你得到一个数组:[...] 还是上面提到的输出?

标签: bash curl grep sh jq


【解决方案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 是 slurp。 \(...) 是 string interpolation。

--slurp/-s:
不要为输入中的每个 JSON 对象运行过滤器,而是将整个输入流读入一个大数组并只运行一次过滤器。

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多