我下面有一个JSON数组响应
[
{
"user": {
"login": "TOM",
},
"body": "",
"state": "APPROVED",
},
{
"user": {
"login": "JERRY",
},
"body": "",
"state": "APPROVED",
},
{
"user": {
"login": "ANDY",
},
"body": "",
"state": "REJECTED",
}
]
我正在编写代码来检查是否只有当用户Jerry存在并且状态为APPROVED时,我才应该将变量值设置为true,否则它应该为false。
在上面的情况下,我应该得到真,在下面的情况下,它应该是假的
[
{
"user": {
"login": "TOM",
},
"body": "",
"state": "APPROVED",
},
{
"user": {
"login": "JERRY",
},
"body": "",
"state": "REJECTED",
},
{
"user": {
"login": "ANDY",
},
"body": "",
"state": "REJECTED",
}
]
或
[
{
"user": {
"login": "TOM",
},
"body": "",
"state": "APPROVED",
},
{
"user": {
"login": "ANDY",
},
"body": "",
"state": "REJECTED",
}
]
我试过下面的代码,但我无法解决这两个条件
hasJerry = false
if [ (jq -r '.[].user.login | index("JTHOM949")') && (jq -r '.[].state' == "APPROVED") ]; then
hasJerry = true
fi
谁能帮我修改一下这个脚本。
2条答案
按热度按时间csbfibhn1#
你可以让jq输出
true
或false
,这样就可以直接设置变量。在jq中,您可以使用any
来查找“至少一个项目”符合您的条件。Demo
请注意,您的Bash脚本有错误(例如:
=
周围的空格和变量赋值),以及您的(示例)JSON输入(例如对象中最后一个字段后的逗号)。请先更正。wydwbb8l2#
您可以测试返回状态,而不是返回原始的True或False字符串: