Return 数组中的整个对象基于使用 jq 的对象中的键值
Return entire object from Array based on key value in object using jq
我有一个 .json 文件,如果该对象中的键值等于 'failed',我想通过 jq 过滤到 return 数组中的整个对象。我该怎么做?
示例json:
"version": "0.26.0",
"controls": [{
"id": "os-1.0",
"status": "passed",
"code_desc": "File /etc/profile content should match /umask\s*022/",
"profile_id": "test"
}, {
"id": "os-1.0",
"status": "passed",
"code_desc": "File /etc/bashrc content should match /umask\s*022/",
"profile_id": "test"
}, {
"id": "os-1.0",
"status": "failed",
"code_desc": "File /etc/csh.cshrc content should match /umask\s*022/",
"profile_id": "test"
"message": "\nexpected: \"/sbin/sulogin\"\n got: \n\n(compared using `cmp` matcher)\n"
}]
输出到新文件:
{
"id": "os-1.0",
"status": "failed",
"code_desc": "File /etc/csh.cshrc content should match /umask\s*022/",
"profile_id": "test"
"message": "\nexpected: \"/sbin/sulogin\"\n got: \n\n(compared using `cmp` matcher)\n"
}
显示为 JSON 的文本无效,显示为 JSON。假设它是固定的
结构{"version": _, "controls": _}
,下面的过滤器
将产生如下所示的结果:
.controls[] | select(.status == "failed")
输出:
{
"id": "os-1.0",
"status": "failed",
"code_desc": "File /etc/csh.cshrc content should match /umask\s*022/",
"profile_id": "test",
"message": "\nexpected: \"/sbin/sulogin\"\n got: \n\n(compared using `cmp` matcher)\n"
}
注意:为了稳健性,您可能希望使用 .status?
而不是 .status
。
我有一个 .json 文件,如果该对象中的键值等于 'failed',我想通过 jq 过滤到 return 数组中的整个对象。我该怎么做?
示例json:
"version": "0.26.0",
"controls": [{
"id": "os-1.0",
"status": "passed",
"code_desc": "File /etc/profile content should match /umask\s*022/",
"profile_id": "test"
}, {
"id": "os-1.0",
"status": "passed",
"code_desc": "File /etc/bashrc content should match /umask\s*022/",
"profile_id": "test"
}, {
"id": "os-1.0",
"status": "failed",
"code_desc": "File /etc/csh.cshrc content should match /umask\s*022/",
"profile_id": "test"
"message": "\nexpected: \"/sbin/sulogin\"\n got: \n\n(compared using `cmp` matcher)\n"
}]
输出到新文件:
{
"id": "os-1.0",
"status": "failed",
"code_desc": "File /etc/csh.cshrc content should match /umask\s*022/",
"profile_id": "test"
"message": "\nexpected: \"/sbin/sulogin\"\n got: \n\n(compared using `cmp` matcher)\n"
}
显示为 JSON 的文本无效,显示为 JSON。假设它是固定的
结构{"version": _, "controls": _}
,下面的过滤器
将产生如下所示的结果:
.controls[] | select(.status == "failed")
输出:
{
"id": "os-1.0",
"status": "failed",
"code_desc": "File /etc/csh.cshrc content should match /umask\s*022/",
"profile_id": "test",
"message": "\nexpected: \"/sbin/sulogin\"\n got: \n\n(compared using `cmp` matcher)\n"
}
注意:为了稳健性,您可能希望使用 .status?
而不是 .status
。