如何在Bash中检查文件内的JSON是否为空(格式为{})?
用jq检查JSON文件是否为空对象({})
当然可以用jq实现这个需求,下面是几种实用的方法:
方法一:直接对比空对象
使用-e参数让jq根据输出的布尔值设置退出码(true对应退出码0,false对应退出码1),命令如下:
jq -e '. == {}' your_file.json
执行后:
- 如果文件内容是
{},命令会输出true且退出码为0 - 如果文件内容非空(比如
{"key": "value"})或格式错误,会输出false(或报错)且退出码非0
如果只想通过退出码判断,不想看到输出,可以重定向到/dev/null:
jq -e '. == {}' your_file.json > /dev/null && echo "该JSON文件是空对象({})" || echo "该JSON文件不是空对象"
方法二:检查键的数量
空对象没有任何键,所以可以通过统计键的长度来判断:
jq -e 'keys | length == 0' your_file.json
逻辑和方法一完全一致,只是判断方式不同,适合习惯从键的角度思考的场景。
在shell脚本中使用
如果要在脚本里做判断,可以这样写:
#!/bin/bash JSON_FILE="your_file.json" if jq -e '. == {}' "$JSON_FILE" > /dev/null; then echo "[$JSON_FILE] 是空JSON对象" else echo "[$JSON_FILE] 不是空JSON对象或格式错误" fi
内容的提问来源于stack exchange,提问作者Murakami
相关产品推荐
相关产品推荐

