我正在使用 jq 来解析一些 JSON。我想检查一个属性是否存在。如果它存在,我总是想获取数组中的第一个元素。基于此,我想使用 if then ... else
。
我的代码如下所示:
JSON_INPUT='{"var1":[{"foo":"bar"}],"var2":[{"fooooo":"baaaaar"}]}'
VAR2=$(echo $JSON_INPUT | jq '.["var2"] | .[0]')
if [ -z "${VAR2}" ]
then
echo "does not exist"
# do some stuff...
else
echo "exist"
# do some stuff...
fi
JSON_INPUT 可以包含
var2
但不能包含。如果不存在,VAR2
将为空。但我无法检查这个空值。错误在哪里? 最佳答案
代替
[ -z "${VAR2}" ]
和[ "${VAR2}" = "null" ]
因为如果 jq
在 JSON 文件中找不到,null
将返回字符串 var2
。或使用
--exit-status
:if echo "$JSON_INPUT" | jq --exit-status '.var2' >/dev/null; then
echo "exists"
else
echo "does not exist"
fi
关于json - 如何检查jq结果是否为空?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57517345/