请注意,JSON无效。假设简单的修正,和这样的设置:
拥有这个json文件:
{
"rolesToAdd": [],
"rolesToModify": [
{
"name": "administrator",
"nativeRole": "AdminUser",
"description": "Administrator role",
"permissions": [
{
"operation": "CanAcceptRequest",
"name": "Can admin accept request",
"value": false
},
{
"operation": "CanSeeRequest",
"name": "Can admin see request",
"value": false
}
]
},
{
"name": "simpleUser",
"nativeRole": "User",
"description": "User role",
"permissions": [
{
"operation": "CanPostRequest",
"name": "Can user post request",
"value": false
},
{
"operation": "CanCancel",
"name": "Can user cancel request",
"value": false
}
]
}
]
}
我需要更改这个json中的值。我写了这样的方法来做到这一点:
Map configMap = ReadAboveJson()
def setAdminCanSeeRequest(boolean canSee) {
configMap.rolesToModify[0].permissions[1].value = canSee
}
def setUserCanPostRequest(boolean canPost) {
configMap.rolesToModify[1].permissions[0].value = canPost
}
如何编写这些方法,以便他们能够通过等于"administrator"的键"name"在rolesToModify列表中找到元素的索引,然后能够通过等于"CanSeeRequest"的键"operation"在权限列表中找到索引?
我试着做这样的事情:
int rolesToModifyIndex = configMap.rolesToModify.findIndexOf { object -> object.name == "administrator"}
但它不起作用。将感谢您的帮助。
检查ReadAboveJson
方法的代码,可能存在一些问题,因为findIndexOf
的工作原理如您所述:
import groovy.json.JsonSlurper
def input = '''{
"rolesToAdd": [],
"rolesToModify": [
{
"name": "administrator",
"nativeRole": "AdminUser",
"description": "Administrator role",
"permissions": [
{
"operation": "CanAcceptRequest",
"name": "Can admin accept request",
"value": false
},
{
"operation": "CanSeeRequest",
"name": "Can admin see request",
"value": false
}
]
},
{
"name": "simpleUser",
"nativeRole": "User",
"description": "User role",
"permissions": [
{
"operation": "CanPostRequest",
"name": "Can user post request",
"value": false
},
{
"operation": "CanCancel",
"name": "Can user cancel request",
"value": false
}
]
}
]
}
'''
def json = new JsonSlurper().parseText(input)
assert json.rolesToModify.findIndexOf { it.name == 'simpleUser' } == 1
assert json.rolesToModify.findIndexOf { it.name == 'administrator' } == 0
然而,您可以使用find
方法中更简单的方法,该方法可以返回给定名称的角色,例如:
def user = json.rolesToModify.find { it.name == 'simpleUser' }
assert user.name == 'simpleUser'
assert user.permissions[0].value == false
def setAdminCanSeeRequest = { def configMap, def canSee ->
myFind(configMap)["value"] = canSee
configMap
}
那么问题可以指定如下:
def configMap = new groovy.json.JsonSlurper().parseText(s)
assert ! myFind(configMap)["value"]
configMap = setAdminCanSeeRequest(configMap, true)
assert myFind(configMap)["value"]
CCD_ 4的实现是:
def myFind = { def configMap ->
configMap.rolesToModify.find {
it['name'] == 'administrator'
}['permissions'].find {
it['operation'] = 'CanSeeRequest'
}
}
根据需要直接向myFind
添加参数。