【问题标题】:Unable to parse json output of artifactory with jq in linux无法在linux中使用jq解析artifactory的json输出
【发布时间】:2016-12-28 17:11:39
【问题描述】:

在 Artifactory 中执行此查询后

/usr/bin/jfrog rt s foo/01_Develop/01_CI/HPCC-Package-*.zip

我有这个输出:

[Info] Searching artifacts...
[Info] Found 3 artifacts.
[
  {
    "path": "foo/01_Develop/01_CI/HPCC-Package-47.zip"
  },
  {
    "path": "foo/01_Develop/01_CI/HPCC-Package-48.zip"
  },
  {
    "path": "foo/01_Develop/01_CI/HPCC-Package-72.zip"
  }
]

我想按照here的建议使用此命令获取 json 数组中的最后一条路径:

/usr/bin/jfrog rt s foo/01_Develop/01_CI/HPCC-Package-*.zip | jq .[-1].path

但是失败了

解析错误:第 1 行第 6 列的数字文字无效

我无法更改 json,因为它是人工 jfrog 工具的输出

  • 如何修复 JQ 查询?
  • 还有其他方法可以获取最后一条路径吗?

注意:我有 jq 1.5 版

更新:

使用引号我有完全相同的错误:

/usr/bin/jfrog rt s foo/01_Develop/01_CI/HPCC-Package-*.zip | jq '.[-1].path'
/usr/bin/jfrog rt s foo/01_Develop/01_CI/HPCC-Package-*.zip | jq ".[-1].path"

【问题讨论】:

  • 无法在 Ubuntu 上使用 JQ 1.5 进行复制。您的外壳是否可能破坏[-1]?如果将.[-1].path 放在引号中会发生什么?
  • 作为更新添加。带引号我有同样的错误
  • 我的文件中有一些标题,可能是这个问题

标签: json linux artifactory jq skip


【解决方案1】:

正如前面的答案中提到的,发生此错误是因为 JFrog CLI 的输出不是纯 JSON。
您可能希望将 JFROG_CLI_LOG_LEVEL 环境变量设置为 ERROR,以便命令不会提示其他消息。
更多详情可以阅读JFrog CLI wiki.

【讨论】:

    【解决方案2】:

    您的 Artifactory 输出不是纯 json...您需要删除那些非 json 部分。假设我们只需要跳过前两行,我们可以使用 tail 跳过 em。

    /usr/bin/jfrog rt s foo/01_Develop/01_CI/HPCC-Package-*.zip | tail -n +3 | jq '.[-1].path'
    

    【讨论】:

      【解决方案3】:

      为了记录,这是一个仅 jq 的解决方案,它假设恰好有两行非 JSON 序言:

      ... | jq -n -R -r '[inputs][2:] | join("") | fromjson[-1]' 
      {
        "path": "foo/01_Develop/01_CI/HPCC-Package-72.zip"
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 2023-03-31
        相关资源
        最近更新 更多