无法在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"
答
为了记录在案,这里有一个唯一的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.
无法在Ubuntu上使用JQ 1.5进行重现。你的shell是否可能会损坏'[-1]'?如果将'。[ - 1] .path'放在引号中会发生什么? – jwodder
作为更新添加。用引号我有相同的错误 –
我有一些头文件,也许这是问题 –