无法从 groovy 中的地图获取值
Unable to fetch value from Map in groovy
我有一个 JSON 回复如下
{
"id":27,
"merchant_id":"39",
"title":"Shorts",
"subtitle":null,
"price":100,
"description":null,
"images":[
],
"image_thumbs":[
],
"options":[
{
"code":"size",
"label":"Size",
"extra_info":"",
"values":[
{
"label":"Small",
"value":"4"
},
{
"label":"Medium",
"value":"5"
}
]
}
],
"options_available":[
{
"combination":[
{
"code":"size",
"value":"Small"
}
]
},
{
"combination":[
{
"code":"size",
"value":"Medium"
}
]
}
],
"custom_options":[
]
}
我在 JSR223 采样器中有如下代码:
import com.jayway.jsonpath.JsonPath
import org.apache.commons.lang3.RandomUtils
import org.apache.jmeter.samplers.SampleResult
def options = JsonPath.read(prev.getResponseDataAsString(), '$.options')
def randomOption = options.get(RandomUtils.nextInt(0, options.size()))
def code = randomOption.get("code")
vars.put('code1', code)
def values = randomOption.get('values')
def randomValue = values.get(RandomUtils.nextInt(0, values.size())) as
String
def FValue = randomValue.get('value')
vars.put('ValueF', FValue)
vars.put('randomValue', randomValue)
在调试上述代码时,我能够按预期获得随机值 [label:Small, value:4] / [label:Medium, value:5]。但是我无法从输出中获取值。
Getting error as
javax.script.ScriptException: javax.script.ScriptException:
groovy.lang.MissingMethodException: No signature of method:
java.lang.String.get() is applicable for argument types: (java.lang.String)
values: [value]
Possible solutions: getAt(java.lang.String), next(), grep(),
getAt(groovy.lang.EmptyRange), grep(java.lang.Object),
getAt(java.util.Collection)
在此方面的帮助很有用并表示感谢!
您的 randomValue
是 LinkedHashMap 的实例,因此您可以将 "label" 提取为 randomValue.get('label')
并将 "value" 提取为 randomValue.get('value')
相应。
演示:
我不认为你在 JSR223 采样器中有 prev
shorthand,我的期望是你需要切换到 JSR223 PostProcessor or JSR223 Assertion。
我有一个 JSON 回复如下
{
"id":27,
"merchant_id":"39",
"title":"Shorts",
"subtitle":null,
"price":100,
"description":null,
"images":[
],
"image_thumbs":[
],
"options":[
{
"code":"size",
"label":"Size",
"extra_info":"",
"values":[
{
"label":"Small",
"value":"4"
},
{
"label":"Medium",
"value":"5"
}
]
}
],
"options_available":[
{
"combination":[
{
"code":"size",
"value":"Small"
}
]
},
{
"combination":[
{
"code":"size",
"value":"Medium"
}
]
}
],
"custom_options":[
]
}
我在 JSR223 采样器中有如下代码:
import com.jayway.jsonpath.JsonPath
import org.apache.commons.lang3.RandomUtils
import org.apache.jmeter.samplers.SampleResult
def options = JsonPath.read(prev.getResponseDataAsString(), '$.options')
def randomOption = options.get(RandomUtils.nextInt(0, options.size()))
def code = randomOption.get("code")
vars.put('code1', code)
def values = randomOption.get('values')
def randomValue = values.get(RandomUtils.nextInt(0, values.size())) as
String
def FValue = randomValue.get('value')
vars.put('ValueF', FValue)
vars.put('randomValue', randomValue)
在调试上述代码时,我能够按预期获得随机值 [label:Small, value:4] / [label:Medium, value:5]。但是我无法从输出中获取值。
Getting error as
javax.script.ScriptException: javax.script.ScriptException:
groovy.lang.MissingMethodException: No signature of method:
java.lang.String.get() is applicable for argument types: (java.lang.String)
values: [value]
Possible solutions: getAt(java.lang.String), next(), grep(),
getAt(groovy.lang.EmptyRange), grep(java.lang.Object),
getAt(java.util.Collection)
在此方面的帮助很有用并表示感谢!
您的
randomValue
是 LinkedHashMap 的实例,因此您可以将 "label" 提取为randomValue.get('label')
并将 "value" 提取为randomValue.get('value')
相应。演示:
我不认为你在 JSR223 采样器中有
prev
shorthand,我的期望是你需要切换到 JSR223 PostProcessor or JSR223 Assertion。