通过JMeter提取Vaadin json响应中的字段id

通过JMeter提取Vaadin json响应中的字段id,json,jmeter,vaadin,Json,Jmeter,Vaadin,目前,我正在尝试从Vaadin json响应中提取字段id,以检测所有组合框(RTFComboBox)并进一步处理它们。示例响应(减少): 我需要的是获取id号(这里是1275),我可以处理“for(;;)”垃圾,但我无法提取正确的id值。我试图使用Regex提取器,但这个解决方案不是很灵活(或者我就是不能编写正确的表达式) 当样式子数组包含“RTFComboBox”时,如何获取父id?也许这里需要一些比JMeter的JSON提取器更复杂的解决方案,比如groovy中的一些脚本?我建议,在bea

目前,我正在尝试从Vaadin json响应中提取字段id,以检测所有组合框(RTFComboBox)并进一步处理它们。示例响应(减少):

我需要的是获取id号(这里是1275),我可以处理“for(;;)”垃圾,但我无法提取正确的id值。我试图使用Regex提取器,但这个解决方案不是很灵活(或者我就是不能编写正确的表达式)


当样式子数组包含“RTFComboBox”时,如何获取父id?也许这里需要一些比JMeter的JSON提取器更复杂的解决方案,比如groovy中的一些脚本?

我建议,在beanshell处理器中编写groovy脚本,解析JSON,然后获取状态对象的所有键。下面是代码片段,请确保将java-json.jar添加到JMETER_HOME/lib文件夹中

    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();
    }
试试看{
字符串jsonString=prev.getResponseDataAsString();
JSONArray JSONArray=新的JSONArray(jsonString);
JSONObject object=jsonArray.getJSONObject(0);
JSONObject states=object.getJSONObject(“state”);
字符串键[]=states.getNames(states);
for(int i=0;i
我终于使用JsonSlurper完成了,这是我的JSR223后处理器脚本:

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中输入,即:

映射放置(k,v.立即)

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)