bash 中如何知道 JSON 数组是空数组?

Sae*_*ati 1 command-line text-processing json

我使用此代码来使用 GitHub API 并自动执行一些任务:

curl --silent -H 'Authorization: token github_access_token' 'https://api.github.com/orgs/OrganizationName/repos?per_page=100'
Run Code Online (Sandbox Code Playgroud)

有时我得到这样的回应:

[

]
Run Code Online (Sandbox Code Playgroud)

我想知道响应是否是空数组。

我想过使用jqlikeecho $Response | jq -r ".[]"但我不知道如何从那里继续。

如何在 bash 中找出 JSON 字符串是否为空数组?

mur*_*uru 5

如果是jq,您可以测试输入是否为空列表:

% echo '["a"]' | jq '. == []'
false
% echo '[]' | jq '. == []'
true
% echo '[]' | jq -e '. | length == 0'
true
% echo '["a"]' | jq -e '. | length == 0'
false
Run Code Online (Sandbox Code Playgroud)

您可以使用以下-e选项:

--exit-status / -e:
Run Code Online (Sandbox Code Playgroud)

如果最后一个输出值既不为 false 也不为 null,则将 jq 的退出状态设置为 0;如果最后一个输出值为 false 或 null,则将 jq 的退出状态设置为 1;如果未生成有效结果,则将 jq 的退出状态设置为 4。通常,如果存在任何使用问题或系统错误,则 jq 以 2 退出;如果存在 jq 程序编译错误,则以 3 退出;如果 jq 程序运行,则以 0 退出。

所以:

% echo '["a"]' | jq '. == []'
false
% echo '[]' | jq '. == []'
true
% echo '[]' | jq -e '. | length == 0'
true
% echo '["a"]' | jq -e '. | length == 0'
false
Run Code Online (Sandbox Code Playgroud)

  • ...还有一个显式的 [isempty](https://jqlang.github.io/jq/manual/#isempty) 函数 (2认同)