我正在使用 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/

10-12 12:52
查看更多