[英]How filter json file with jq using bash
我正在尝试使用 bash 过滤我的 json 文件,该文件可能类似于:
{
"key1": [],
"key2":["first_value","second_value"]
}
如果我想获取我得到的 key1 和 key2,我可以这样做:
if $(cat $my_json | jq 'has("key1")'); then
values=$(jq -r ".key1" "$my_json")
for item in $values
do
echo "Item : $item"
done
fi
前面的output是:
Output:
Item : []
如果我的文件没有这样的密钥并且我想验证它,这可以防止出现任何问题。
参考我的示例,如何验证值是否为空?
我想避免对空值进行任何迭代。
有什么办法可以用 jq 验证现有密钥,该密钥不应为空?
我想实现的目标是在文件末尾重定向
key2:
- first_value
- second_value
如果是钥匙,因为它是空的我不想有任何结果
这会丢弃所有具有空数组的项,并遍历 rest 打印出键名,然后是所有数组项。
jq -r 'to_entries[] | select(.value | length > 0) | .key, "- \(.value[])"'
key2
- first_value
- second_value
在 jq 中,您可以使用length
过滤器来获取数组的大小。
$ echo '{"key1": [], "key2":["1","2"]}' | jq -r ".key2 | length"
2
$ echo '{"key1": [], "key2":["1","2"]}' | jq -r ".key1 | length"
0
此外,即使这样,您也会发现迭代存储在$values
中的数组元素时出现问题。 我认为你想要的是这样的:
values=$(jq -r ".key1[]" "$my_json")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.