【发布时间】:2018-04-07 20:35:37
【问题描述】:
我需要在解除服务时发现错误。响应可以是null,类似
error services-migration/foobar: Not found: services-migration/foobar
或在一切正常时使用有效的 JSON。我想知道jq 是否有办法简单地检查提供的字符串是否是有效的 JSON。我可以检查字符串中的一些关键字,例如error f.e.,但我正在寻找一个更强大的选项,例如。我从 jq 得到true/false 或1/0。
我正在查看jq 的文档以及关于 SO 的一些问题,但一切都是关于从 JSON 中查找和挑选键值,而不是简单地验证字符串。
更新:
我有这个:
result=$(some command)
结果是字符串error services-migration/foobar: Not found: services-migration/foobar
然后是 if 语句:
if jq -e . >/dev/null 2>&1 <<<"$result"; then
echo "it catches it"
else
echo "it doesn't catch it"
fi
它总是以else 子句结尾。
【问题讨论】:
-
如果json无效,jq不会报错退出吗?
-
是的,它给出了一个
parse error,但我想知道是否有办法获得简单的1或0或true/false -
你可以在返回码中得到它,只需将命令中的 stderr 发送到
/dev/null -
你是在检查响应是否为json,然后运行其他命令吗?还是您正在检查,然后想对其运行过滤器?有一些方法可以在纯 jq 中做到这一点,但这取决于你在检查它是否为 json 之后想要做什么。