Arrays Jmeter中JSONObject和JSONArray的使用

Arrays Jmeter中JSONObject和JSONArray的使用,arrays,json,variables,jmeter,jsonobject,Arrays,Json,Variables,Jmeter,Jsonobject,我在为Amazon Kinesis构建Json时遇到了一个问题。 此json必须具有以下格式: { "Records": [ { "Data": "XzxkYXRhPl8x", "PartitionKey": "partitionKey1" }, { "Data": "f1PxFQo92Afh", "PartitionKey": "partiti

我在为Amazon Kinesis构建Json时遇到了一个问题。 此json必须具有以下格式:

{
    "Records": [
        {
            "Data": "XzxkYXRhPl8x",
            "PartitionKey": "partitionKey1"
        },
        {
            "Data": "f1PxFQo92Afh",
            "PartitionKey": "partitionKey2"
        },
        {
            "Data": "Gi4sEdd08HypA",
            "PartitionKey": "partitionKey3"
        }
    ],
    "StreamName": "exampleStreamName"
}
我使用BeanShell采样器创建json作为缓冲区:

import org.json.JSONArray;
import org.json.JSONObject;


//Dichiarazione variabili
int timestampValue=(${startTime}+${i}+1);
float current_powerValue=${current_power_1}+${__Random(0,10)};
String idValue=${__threadNum}+"_"+"5";
JSONObject part = new JSONObject();


//Create JSON

part.put("timestamp",timestampValue);
part.put("parent","${__threadNum}");
part.put("id",idValue);
part.put("state","on");
part.put("today_kwh",65);
part.put("current_power",current_powerValue);
part.put("today_on_time",0);
part.put("on_for",0);
part.put("today_standby_time",0);

//ADD json to array
if(${i}%(${bufferSize}*${sample}-1)==0 && ${i}!=0 || ${i}==${totalNumber}-${endOfDb}){
    //Add to json variable the last json created
    vars.put("json",vars.get("json")+part.toString());
    //Make an JSONObject by json variable of jmeter
    JSONObject tempArray= new JSONObject(vars.get("json"));
    log.info(tempArray.toString());
    //Add tempArray into JSONArray so that it adds square brackets
    JSONArray records= new JSONArray();
    records.put(tempArray);
    //Add the second field streamName
    JSONObject kinesis = new JSONObject();
    kinesis.put("records",records);
    kinesis.put("streamName","kinesis");
    //save into jsonBuffer
    vars.put("jsonBuffer",kinesis.toString());
    //restart json variable
    vars.put("json","");    
}
else{
    //add new json into variable so to store it.
    vars.put("json", vars.get("json")+part.toString()+",");
}
我在jmeter中使用json变量来保存每个iteraction的json,当“I”变量尊重if子句时,我开始创建json结构。 因此,我将最后一个json添加到jmeter变量中,然后创建一个JSONObject来存储这个json,但当我这样做时,它只存储一个json(因为它是一个对象)。 不幸的是,如果我存储在JSONArray中,它会添加“”,因为将变量json作为字符串读取。 最好的解决方案是只使用JSONObject和JSONArray,但如何对所有的iTeraction使用相同的对象(在jmeter中,我不能使用JSONArray) 这是我的jmx

您可以使用以下代码片段进行trt:

if(${i}%(${bufferSize}*${sample}-1)==0 && ${i}!=0 || ${i}==${totalNumber}-${endOfDb}){
 vars.put("json",vars.get("json")+part.toString());
 JSONArray records= new JSONArray("["+vars.get("json")+"]");
 log.info(records.toString());
 //records.put(tempArray);
 JSONObject kinesis = new JSONObject();
 kinesis.put("records",records);
 kinesis.put("streamName","kinesis");
 vars.put("jsonBuffer",kinesis.toString());
 vars.put("json",""); 
}