我使用此代码来使用 GitHub API 并自动执行一些任务:
curl --silent -H 'Authorization: token github_access_token' 'https://api.github.com/orgs/OrganizationName/repos?per_page=100'
有时我会收到这样的回复:
[
]
我想知道响应是否是一个空数组。
我想过使用jq
类似的东西echo $Response | jq -r ".[]"
,但我不知道如何继续。
如何在 Bash 中找出 JSON 字符串是否为空数组?
答案1
如果你jq
,你可以测试输入是否为空列表:
% echo '["a"]' | jq '. == []'
false
% echo '[]' | jq '. == []'
true
% echo '[]' | jq -e '. | length == 0'
true
% echo '["a"]' | jq -e '. | length == 0'
false
您可以使用以下-e
选项:
--exit-status / -e:
如果最后一个输出值既不是 false 也不是 null,则将 jq 的退出状态设置为 0;如果最后一个输出值为 false 或 null,则设置为 1;如果从未产生过有效结果,则设置为 4。通常,如果存在任何使用问题或系统错误,jq 会以 2 退出;如果存在 jq 程序编译错误,则退出状态为 3;如果 jq 程序运行,则退出状态为 0。
所以:
if curl --silent -H 'Authorization: token github_access_token' 'https://api.github.com/orgs/OrganizationName/repos?per_page=100' |
jq -e '. == []'
then
echo Empty output
else
echo Got something
fi
答案2
您可以用数组长度进行测试:
if [[ $(jq length <<<"$Response") -eq 0 ]]; then
echo "Empty"
else
echo "Not empty"
fi