首页 > 解决方案 > 从字符串值提取构建的映射 - 无法恢复值

问题描述

我目前正在尝试在 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”='我的设备名称',然后我重建地图执行以下操作(否则它会从第一个 ':' 拆分)

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 中处理地图一点也不轻松,我确定我做错了什么,但我无法弄清楚,有人可以帮助我吗?

亚历克斯

标签: groovysoapui

解决方案


嗯,其实我找到了另一种方式来满足我的需求

在我构建初始地图的 testStep 中,我执行以下操作:导入 groovy.json.JsonBuilder 并将我的地图存储在这样的自定义属性中,以确保它是有效的 JSON

testRunner.testCase.setPropertyValue("name_uid_map", new JsonBuilder(name_uid_map).toString())

在下一个 testStep 中,我执行以下操作(JSON 的简单提取):

def name_uid_map = context.expand( '${#TestCase#name_uid_map}' )
def jsonSlurper = new groovy.json.JsonSlurper()

map = jsonSlurper.parseText(name_uid_map)

它工作正常。


推荐阅读