在groovy中从JSONArray中删除特定的JSONObject
假设我有一个JSON请求负载,比如在groovy中从JSONArray中删除特定的JSONObject,json,grails,groovy,hashmap,jsonslurper,Json,Grails,Groovy,Hashmap,Jsonslurper,假设我有一个JSON请求负载,比如 { "workflow": { "approvalStore": { "sessionInfo": { "user": "baduser" }, "guardType": "Transaction" } } } 我通过 def user = req.get("workflow").get("approvalS
{
"workflow": {
"approvalStore": {
"sessionInfo": {
"user": "baduser"
},
"guardType": "Transaction"
}
}
}
我通过
def user = req.get("workflow").get("approvalStore").get("sessionInfo").get("user")
现在,我得到了一个resresponseapprovalList
,我将其存储为list
,并将其作为json返回给调用方。到目前为止一切顺利
假设响应(approvalList.json
)如下所示:
[
{
"objId": "abc2",
"maker": "baduser"
},
{
"objId": "abc1",
"maker": "baduser"
},
{
"objId": "abc4",
"maker": "gooduser"
}
]
问题:如何过滤approvalList.json,使其不包含带有“maker”:“baduser”
的条目(对象)?传递给maker
的值本质上应该是我之前得到的user
变量
理想所需输出-
非常简单。首先将JSON解析为一个对象,然后遍历并测试
JSONObject json = JSON.parse(text)
json.each(){ it ->
it.each(){ k,v ->
if(v=='baduser'){
// throw exception or something
}
}
}
还不完全清楚您是否总是希望返回单个对象或对象列表,但此处的关键是使用
collect
:
// given this list
List approvalList = [
[objId: "abc2", maker: "baduser"],
[objId: "abc1", maker: "baduser"],
[objId: "abc4", maker: "gooduser"]
]
// you mentioned you wanted to match a specific user
String user = "baduser"
List filteredList = approvalList.findAll{ it.maker != user}
// wasn't sure if you wanted a single object or a list...
if (filteredList.size() == 1) {
return filteredList[0] as JSON
} else {
return filteredList as JSON
}
请添加您尝试过的代码以及失败的原因(例如错误、堆栈跟踪、日志等),以便我们对其进行改进。谢谢,我想要一个没有
maker=baduser
映射的对象列表。然后我想您可能需要替换approvalList.findAll{it.maker==user}代码>与approvalList.findAll{it.maker!='baduser'}代码>。