无法用linux中的jq解析神器的json输出

时间:2016-12-28 17:11:40

标签: json linux artifactory jq skip

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

3 个答案:

答案 0 :(得分:4)

如前面的答案所述,发生此错误是因为JFrog CLI的输出不是纯JSON 您可能希望将JFROG_CLI_LOG_LEVEL环境变量设置为ERROR,以便命令不会提示其他消息。
有关详细信息,请参阅JFrog CLI wiki.

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

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