Json 检查结果是否为空字符串

Json 检查结果是否为空字符串,json,bash,Json,Bash,我有一个使用jq命令创建的JSON文件。 文件如下所示: [ { “说明”:“, “应用程序”:“你好,测试应用程序” }, { “说明”:“, “应用程序”:“hello world应用程序” } ] 我想要一个简单的if/else条件来检查描述是否为空。 我尝试了不同的方法,但没有一种有效!! 我试过: jq-c.“[]”input.json |同时读取i;做 description=$(echo$i | jq'.description') 如果[[“$description”==”];

我有一个使用
jq
命令创建的JSON文件。 文件如下所示:

[
{
“说明”:“,
“应用程序”:“你好,测试应用程序”
},
{
“说明”:“,
“应用程序”:“hello world应用程序”
}
]
我想要一个简单的if/else条件来检查描述是否为空。 我尝试了不同的方法,但没有一种有效!! 我试过:

jq-c.“[]”input.json |同时读取i;做
description=$(echo$i | jq'.description')
如果[[“$description”==”];
然后
echo“$description为空”
fi
完成
使用相同的代码,但此if/else

if[-z“$description”];
然后
echo“$description为空”
fi
有人能帮我吗。无需将此内容带回bash(目前):

您可以在这里看到,
$description
的扩展不是空的。每次都是一对引号

在这里,管道到bash有几个问题——对
$i
的无引号扩展、重新管道到
jq
以及在两种不同编程语言之间将一对引号转换为空字符串。但我想简单的答案是“只要测试一下
”$description“
是否扩展为一对引号。”

在bash中测试引号意味着引用您的引号:

if [[ $description = '""' ]]; then
    echo '$description expands to a pair of quotes'
fi

在我看来,一个更好的答案是,将工作保留在jq中。

您在哪里为变量$description赋值?您是否设置过变量
$description
,或者您是否假设bash将在json文件中搜索匹配字段?@Cyrus我在文件上有一个循环,如
jq-c.[]”input.json;同时读取I;do description=$(echo$i | jq.description')#这里是if。。。完成
Btw:您的JSON无效。后面有一个非法的逗号。我在编辑中删除了它。现在它是有效的,我不认为这影响了问题的主旨。谢谢。然而,它比这更复杂。如果我需要编写更多的代码,请参阅。另外,我仍然不明白为什么简单的bash if/else不起作用。@dventi3如果你想问关于bash的问题,那么通过消除不必要的
jq
部分,尽可能简单地提出关于bash的问题。然而,我从经验中知道,只有jq…@dventi3你才能做一些强大的事情。这对我来说很有效——你可能忘了在测试中引用你的话。请看我的编辑。@dventi3不客气。请重新考虑在bash中执行此操作。这样会更容易出错,也很难维护。@dventi3如果希望原始字符串不带jq引号,请使用
jq-r
--raw output
)。
jq -c '.[]' foo | while read i; do description=$(echo $i | jq '.description')
printf '%s\n' "$description"
done
""
""
if [[ $description = '""' ]]; then
    echo '$description expands to a pair of quotes'
fi