gpt4 book ai didi

bash - 如果json为空,jq返回null作为字符串

转载 作者:行者123 更新时间:2023-12-03 09:46:40 27 4
gpt4 key购买 nike

我正在运行此命令,确实从json获取值;
addr=$(./xuez-cli getnetworkinfo | jq -r '.localaddresses[0].address')
而且效果很好。

但是如果此.localaddresses[0].address部分为空或什至不存在,jq会像这样将addr变量设置为nulladdr=null
我想检查json是否为空/空并运行其他命令,而不是将其解析为null字符串。

我找不到解决此问题的方法。我怎样才能做到这一点?

最佳答案

首先,请注意:addr=null本质上没有错;您可以测试一下:

if [[ $addr = null ]]; then ...code here...; fi

这个答案的其余部分假装以上说法是不正确的。 :)

对于这种情况,有两种值得注意的做法可以提高错误处理的简便性:
  • 使用set -o pipefail将检测 shell 程序管道的任何部分(不仅仅是最后一个组件)是否失败。
  • 使用jq -e将导致jq的退出状态反射(reflect)其返回的内容是否为false或null。


  • 因此:
    set -o pipefail
    if addr=$(./xuez-cli getnetworkinfo | jq -er '.localaddresses[0].address'); then
    : "address retrieved successfully; this message is not logged unless set -x is active"
    else
    echo "Running other logic here"
    fi

    ...如果 Running other logic here失败(并且 jq指定 -efalse应视为失败),或者 null报告失败退出状态,则转到 xuez-cli

    关于bash - 如果json为空,jq返回null作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135035/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com