Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Bash循环使用json_Json_Bash_Jq - Fatal编程技术网

如何使用Bash循环使用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",

我有一个json文件,如下所示:

{
  "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应该打印什么的澄清。