如何使用Bash循环使用json
我有一个json文件,如下所示:如何使用Bash循环使用json,json,bash,jq,Json,Bash,Jq,我有一个json文件,如下所示: { "version": { "Generated": "@logon", "Value": "Unknown", "LastRun": "Never" }, "hostname": { "Generated": "@logon", "Value": "Unknown", "LastRun": "Never" }, "updates": { "Generated": "@boot",
{
"version": {
"Generated": "@logon",
"Value": "Unknown",
"LastRun": "Never"
},
"hostname": {
"Generated": "@logon",
"Value": "Unknown",
"LastRun": "Never"
},
"updates": {
"Generated": "@boot",
"Value": "Unknown",
"LastRun": "Never"
}
}
在Bash中,如何循环遍历json文件中的每个元素,这些元素具有“生成的”值“@logon”?我想我应该使用jq,但我没有找到正确的过滤器。你是说这个
jq -r '.[].Generated' file.json ; while read -r val ; do
do_something "${val}"
done
你是说这个
jq -r '.[].Generated' file.json ; while read -r val ; do
do_something "${val}"
done
如果要使用bash循环遍历满足条件的JSON对象,请考虑:
while read -r val ; do
echo "${val}"
done < <(jq -rc '.[] | select(.Generated == "@logon")' file.json)
如果在bash中采用这种循环方法,则需要-c选项
当然,最好在jq中尽可能多地处理JSON对象
如果要循环遍历顶级键值对,则可能需要使用到\u条目
,或者使用和\u条目
。例如,要使用.Generated==“@logon”打印对象的键:
注意-不需要bash循环 如果要使用bash循环满足条件的JSON对象,请考虑:
while read -r val ; do
echo "${val}"
done < <(jq -rc '.[] | select(.Generated == "@logon")' file.json)
如果在bash中采用这种循环方法,则需要-c选项
当然,最好在jq中尽可能多地处理JSON对象
如果要循环遍历顶级键值对,则可能需要使用到\u条目
,或者使用和\u条目
。例如,要使用.Generated==“@logon”打印对象的键:
注意-不需要bash循环 嘿,我认为应该是你需要的嘿,我认为应该是你需要的我认为他还想区分
@logon
和@boot
的值,所以额外的比较就足够了。看起来你是对的。我在等待关于jq
应该打印什么的澄清。我想他还想区分@logon
和@boot
的值,所以额外的比较就足够了。看起来你是对的。我正在等待关于jq应该打印什么的澄清。