目前我正在尝试从Vaadin json响应中提取字段ID以检测所有组合框(RTFComboBox)并进一步处理它们。示例响应(减少):
for(;;);[{
"syncId": 113,
"clientId": 113,
"changes": [],
"state": {
"1273": {
"caption": "",
"styles": ["tokenfield", "tokentextfield"]
},
"1274": {
"styles": ["RTFTokenField"]
},
"1275": {
"width": "185.0px",
"immediate": true,
"styles": ["RTFTokenField", "RTFComboBox", "tiny"],
"registeredEventListeners": ["focus"]
}
}
}]
我需要的是获取ID号(这里是1275),我可以处理“for(;;)”垃圾,但我无法提取正确的id值。我试图使用Regex Extractor,但这个解决方案不是很灵活(或者我只是不能写出正确的表达式)。
当样式子数组包含'RTFComboBox'时,如何获取父ID的任何想法?也许这里需要一些比JMeter的JSON Extractor更复杂的解决方案,例如groovy中的一些脚本?
答案 0 :(得分:0)
我建议,在beanshell处理器中编写一个groovy脚本,解析JSON然后获取状态对象的所有键。这是代码片段,请确保在JMETER_HOME / lib文件夹中添加java-json.jar
try {
String jsonString = prev.getResponseDataAsString();
JSONArray jsonArray = new JSONArray(jsonString);
JSONObject object = jsonArray.getJSONObject(0);
JSONObject states = object.getJSONObject("state");
String keys[] = states.getNames(states);
for(int i=0; i< keys.length; i++) {
log.info(keys[i]);
}
} catch (JSONException e) {
e.printStackTrace();
}
答案 1 :(得分:0)
我终于使用JsonSlurper制作了它,这是我的JSR223 PostProcessor脚本:
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def response = jsonSlurper.parseText(prev.getResponseDataAsString().drop(8))
//drop to remove for(;;); junk preventing proper parse
def map = [:]
response.state[0].each {k, v -> if(v.styles != null && v.styles.contains("RTFComboBox")) {map.put(k, v)}}
//map contains key (field id-most important to me) and key (rest of values in node)
如果你需要一些特定的值,只需在map.put line set v.field中,即:
map.put(k,v.immediate)