Ram*_*man 5 bash shell null json jq
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
JSON_INPUT 可以包含var2但不能包含。如果不存在VAR2则为空。但我无法检查这个空值。错误在哪里?
错误在哪里?
代替
[ -z "${VAR2}" ]
Run Code Online (Sandbox Code Playgroud)
和
[ "${VAR2}" = "null" ]
Run Code Online (Sandbox Code Playgroud)
因为如果在 JSON 文件中找不到,则jq返回字符串。nullvar2
或使用--exit-status:
if echo "$JSON_INPUT" | jq --exit-status '.var2' >/dev/null; then
echo "exists"
else
echo "does not exist"
fi
Run Code Online (Sandbox Code Playgroud)
我想检查一个属性是否存在。如果它存在,我总是想获取数组中的第一个元素......
该条件最好可以表示为:
if has("var2")
Run Code Online (Sandbox Code Playgroud)
因此,由于您似乎希望在不满足条件时 VAR2 为空,因此您可以编写:
VAR2=$(jq 'if has("var2") then .["var2"][0] else null end')
Run Code Online (Sandbox Code Playgroud)
如果不满足条件,我们会发现:
echo "$VAR2"
null
Run Code Online (Sandbox Code Playgroud)
不过,这里有一个小问题:例如,如果数组的第一个值是怎么办null?
因此,更具区别性的方法是编写:
VAR2=$(jq 'if has("var2") then .["var2"][0] else empty end')
Run Code Online (Sandbox Code Playgroud)
即使这两种方法都不是您想要的,它们也表明,将尽可能多的逻辑放入 jq 程序中会产生一个整洁、易于理解且高效的解决方案。
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |