无法在Linux解析artifactory的的JSON输出与JQ

问题描述:

在Artifactory的执行这个查询后无法在Linux解析artifactory的的JSON输出与JQ

/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" 
    } 
] 

我想在JSON阵列的最后一个路径这个命令的建议here

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

但失败

parse error: Invalid numeric literal at line 1, column 6

我不能改变JSON,因为它是从artifactory的jfrog工具

  • 如何解决JQ查询的输出?
  • 有没有其他的方法来获得最后的路径?

注:我有JQ版本1.5

UPDATE:

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

/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" 
+0

无法在Ubuntu上使用JQ 1.5进行重现。你的shell是否可能会损坏'[-1]'?如果将'。[ - 1] .path'放在引号中会发生什么? – jwodder

+0

作为更新添加。用引号我有相同的错误 –

+0

我有一些头文件,也许这是问题 –

为了记录在案,这里有一个唯一的JQ的解决方案,假设恰好有非JSON序言的两行:

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

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

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

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