无法使用 linux 中的 jq 解析 artifactory 的 json 输出
Unable to parse json output of artifactory with jq in linux
在 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"
}
]
我想按照建议使用此命令获取 json 数组中的最后一条路径 :
/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 版
更新:
使用引号我有完全相同的错误:
/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"
您的 Artifactory 输出不纯 json...您需要删除那些非 json 部分。假设我们只需要跳过前两行,我们可以使用 tail 来跳过 em。
/usr/bin/jfrog rt s foo/01_Develop/01_CI/HPCC-Package-*.zip | tail -n +3 | jq '.[-1].path'
郑重声明,这是一个仅 jq 的解决方案,它假设恰好有两行非 JSON 序言:
... | jq -n -R -r '[inputs][2:] | join("") | fromjson[-1]'
{
"path": "foo/01_Develop/01_CI/HPCC-Package-72.zip"
}
在之前的回答中提到,出现这个错误是因为JFrog CLI的输出不纯JSON。
您可能需要将 JFROG_CLI_LOG_LEVEL 环境变量设置为 ERROR,这样命令就不会提示其他消息。
有关更多详细信息,您可以阅读 JFrog CLI wiki.
在 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"
}
]
我想按照建议使用此命令获取 json 数组中的最后一条路径
/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 版
更新:
使用引号我有完全相同的错误:
/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"
您的 Artifactory 输出不纯 json...您需要删除那些非 json 部分。假设我们只需要跳过前两行,我们可以使用 tail 来跳过 em。
/usr/bin/jfrog rt s foo/01_Develop/01_CI/HPCC-Package-*.zip | tail -n +3 | jq '.[-1].path'
郑重声明,这是一个仅 jq 的解决方案,它假设恰好有两行非 JSON 序言:
... | jq -n -R -r '[inputs][2:] | join("") | fromjson[-1]'
{
"path": "foo/01_Develop/01_CI/HPCC-Package-72.zip"
}
在之前的回答中提到,出现这个错误是因为JFrog CLI的输出不纯JSON。
您可能需要将 JFROG_CLI_LOG_LEVEL 环境变量设置为 ERROR,这样命令就不会提示其他消息。
有关更多详细信息,您可以阅读 JFrog CLI wiki.