从字符串值提取构建的地图 - 无法恢复值
map built from string value extraction - cannot recover value
我目前正在尝试在 groovy 中操作地图,但我遇到了无法解决的问题。
我构建了一个映射,以便将 id 作为键,将名称作为值
我必须将它存储为一个字符串,然后恢复它并重建地图。
我的键看起来像 id:my:device,名字像
当我构建我的地图时,我最终得到了类似
mymap = [id:my:device: ...etc.] 这不会对恢复造成任何问题,mymap[id:my:device] 给出了我的设备名称。
编辑:
我为每个地图元素构建地图 name_uid_map[measure.uid] =jSonResponse.value
,在我的测试用例结束时,我将它存储为 testRunner.testCase.setPropertyValue("name_uid_map", name_uid_map.toString()
存储恢复后,由于是字符串存储,不易破译。我修改字符串以获得 "id:my:device"='my device name',然后我重建地图执行以下操作(否则它会从第一个 ':' 拆分)
mymap = map.split(",\s*").collectEntries{
def keyAndVal = it.split("=")
[(keyAndVal[0]):keyAndVal[1]]
}
问题是现在我重建的地图看起来像
{"id:my:device"='my device name' ... }
如果我这样做
mymap.each{
key, value ->
log.info key
log.info value
}
我得到
键:"id:my:device"
值:我的设备名称
哪个是正确的。当我想从密钥中恢复值时,遇到了我的问题,即:
mymap["id:my:device"] = null
如果我尝试获取我得到的值的类型:
my value = class org.codehaus.groovy.runtime.NullObject
我在 groovy 中处理地图一点都不轻松,我确定我做错了什么,但我无法弄清楚,有人可以帮助我吗?
亚历克斯
嗯,
其实我找到了另一种方式来满足我的需求
在构建初始地图的 testStep 中,我执行以下操作:
导入 groovy.json.JsonBuilder
我将我的地图存储在这样的自定义 属性 中,以确保它是有效的 JSON
testRunner.testCase.setPropertyValue("name_uid_map", new JsonBuilder(name_uid_map).toString())
在下一个测试步骤中,我执行以下操作(JSON 的简单提取):
def name_uid_map = context.expand( '${#TestCase#name_uid_map}' )
def jsonSlurper = new groovy.json.JsonSlurper()
map = jsonSlurper.parseText(name_uid_map)
而且效果很好。
我目前正在尝试在 groovy 中操作地图,但我遇到了无法解决的问题。
我构建了一个映射,以便将 id 作为键,将名称作为值 我必须将它存储为一个字符串,然后恢复它并重建地图。 我的键看起来像 id:my:device,名字像
当我构建我的地图时,我最终得到了类似 mymap = [id:my:device: ...etc.] 这不会对恢复造成任何问题,mymap[id:my:device] 给出了我的设备名称。
编辑:
我为每个地图元素构建地图 name_uid_map[measure.uid] =jSonResponse.value
,在我的测试用例结束时,我将它存储为 testRunner.testCase.setPropertyValue("name_uid_map", name_uid_map.toString()
存储恢复后,由于是字符串存储,不易破译。我修改字符串以获得 "id:my:device"='my device name',然后我重建地图执行以下操作(否则它会从第一个 ':' 拆分)
mymap = map.split(",\s*").collectEntries{
def keyAndVal = it.split("=")
[(keyAndVal[0]):keyAndVal[1]]
}
问题是现在我重建的地图看起来像 {"id:my:device"='my device name' ... } 如果我这样做
mymap.each{
key, value ->
log.info key
log.info value
}
我得到 键:"id:my:device" 值:我的设备名称 哪个是正确的。当我想从密钥中恢复值时,遇到了我的问题,即:
mymap["id:my:device"] = null
如果我尝试获取我得到的值的类型:
my value = class org.codehaus.groovy.runtime.NullObject
我在 groovy 中处理地图一点都不轻松,我确定我做错了什么,但我无法弄清楚,有人可以帮助我吗?
亚历克斯
嗯, 其实我找到了另一种方式来满足我的需求
在构建初始地图的 testStep 中,我执行以下操作: 导入 groovy.json.JsonBuilder 我将我的地图存储在这样的自定义 属性 中,以确保它是有效的 JSON
testRunner.testCase.setPropertyValue("name_uid_map", new JsonBuilder(name_uid_map).toString())
在下一个测试步骤中,我执行以下操作(JSON 的简单提取):
def name_uid_map = context.expand( '${#TestCase#name_uid_map}' )
def jsonSlurper = new groovy.json.JsonSlurper()
map = jsonSlurper.parseText(name_uid_map)
而且效果很好。