![如何知道 Bash 中的 JSON 数组是空数组?](https://linux22.com/image/953369/%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%20Bash%20%E4%B8%AD%E7%9A%84%20JSON%20%E6%95%B0%E7%BB%84%E6%98%AF%E7%A9%BA%E6%95%B0%E7%BB%84%EF%BC%9F.png)
我使用此代码来使用 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