Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
在groovy中从JSONArray中删除特定的JSONObject_Json_Grails_Groovy_Hashmap_Jsonslurper - Fatal编程技术网

在groovy中从JSONArray中删除特定的JSONObject

在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

假设我有一个JSON请求负载,比如

{
    "workflow": {
        "approvalStore": {
            "sessionInfo": {
                "user": "baduser"
            },
            "guardType": "Transaction"
        }
    }
}
我通过

def user = req.get("workflow").get("approvalStore").get("sessionInfo").get("user")
现在,我得到了一个resresponse
approvalList
,我将其存储为
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'}​​​​​​