【发布时间】:2021-04-08 08:38:30
【问题描述】:
我有以下 BASH 代码:
response=$( curl -Ls $endpoint )
if [ -n "$response" ]; then # nonempty
echo "$response" | jq .
fi
问题是有时响应可能是非空的但不是 JSON(如果不是 200)。
只有当它是有效的 JSON 时,是否可以通过 jq 管道输出?
以下作品:
echo $x | jq . 2>/dev/null || echo $x
测试:
> x='{"foo":123}'; echo $x | jq . 2>/dev/null || echo "Invalid: $x"
{
"foo": 123
}
> x='}'; echo $x | jq . 2>/dev/null || echo "Invalid: $x"
Invalid: }
但是,我觉得不舒服。
【问题讨论】:
-
请注意,
echo并不总是有效,具体取决于实现。一些实现处理反斜杠转义。printf '%s' "$x"更可靠。
标签: bash curl conditional-statements jq