如何知道 Bash 中的 JSON 数组是空数组?

如何知道 Bash 中的 JSON 数组是空数组?

我使用此代码来使用 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

相关内容