一、解析接口请求返回json中含数组的一层对象的简单结构
1 数据结构如下:
{
"data": [
{
"cpid": "20190904162049UyPhgiTkUAoQ8w0i70BdnqQybmB4",
"dbServerName": "192.168.31.11"
},
{
"cpid": "20190906113836wyzwnK9IWdfYhI2kwxNoTPGbv8W6",
"dbServerName": "172.15.103.27"
}
],
"pageIndex": 0,
"pageNo": 1,
"pageSize": 10
}
2. 如解析1中的数据,指定ip为192.168.31.11的cpid,代码如下:
import org.json.JSONObject; //需要jmeter的lib/ext中放入 json.jar包
import org.json.JSONArray;
//获取jmeter接口请求返回值。此处获取到String类型;
String response_data = prev.getResponseDataAsString();
//log.info("response_data------>"+response_data); //jmeter beanshell打印出返回的结果
JSONObject data_obj = new JSONObject(response_data); //将接口响应结果转换为jsonobject对象
JSONArray data_array = data_obj.getJSONArray("data"); //获取响应结果中参数data值; data为数组
//log.info("data_array------>"+data_array.toString());
int len = data_array.length(); //获取data数组的长度
String strlen = Integer.toString(len);
String cpidR="";
//循环data数据中的数据找到要获取的指定数据
for(int i = 0;i <len;i++){
JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(i);
//log.info("jsonTemp------>"+jsonTemp.toString());
String dbServerName = jsonTemp.get("dbServerName").toString(); //获取data中的dbServerName
//log.info("dbServerName"+i+"------>"+dbServerNameR);
if(dbServerName.equals("192.168.31.11") )
{
cpidR = jsonTemp.get("cpid").toString(); //将满足条件的数据获取赋值给全局变量cpidR
break;
}else{
continue;
}
}
log.info("cpidR------>"+cpidR);
vars.put("orcl_cpid",cpidR); //将获取的满足条件的cpidR值存为jmeter变量,提供下个接口使用,下个接口直接使用此处的${orcl_cpid}即可
return "成功返回cpid";
二、解析接口请求返回json中含数组的多层对象的复杂结构
1. json数据结构
{
"data": [
{
"cpid": "20190904162049UyPhgiTkUAoQ8w0i70BdnqQybmB4",
"dbServerName": "192.168.31.11"
“coonpool”:
{
“poolid”:“123456789”,
“poolname”:“nametest”
}== //第二层对象
},
{
"cpid": "20190906113836wyzwnK9IWdfYhI2kwxNoTPGbv8W6",
"dbServerName": "172.15.103.27"
“coonpool”:
{
“poolid”:“A123456789”,
“poolname”:“nametest”
}
}
],
"pageIndex": 0,
"pageNo": 1,
"pageSize": 10
}
2. jmeter使用beanshell解析的java代码如下:
需求:获取poolid为123456789的poolname与cpid
import org.json.JSONObject;
import org.json.JSONArray;
//获取请求返回值。此处获取到String类型;
String response_data = prev.getResponseDataAsString();
log.info("response_data------>"+response_data);
JSONObject data_obj = new JSONObject(response_data);
JSONArray data_array = data_obj.getJSONArray("data"); //获取响应结果中参数data值; data为数组
log.info("data_array------>"+data_array.toString());
int len = data_array.length(); //获取data数组的长度
String strlen = Integer.toString(len);
String cpid ="";
String poolname="";
for(int i = 0;i <len;i++){
JSONObject responseRunVo1 = (JSONObject)data_array.getJSONObject(i);
JSONObject responseRunVo2 = (JSONObject)jsonTemp.getJSONObject("connpool");
// log.info("获取数组的第二层对象元素:"+responseRunVo);
String poolidR= responseRunVo2.getString("poolid");
if (poolidR.equals("123456789") )
{
cpid =responseRunVo1.getString("cpid"); //第一层对象的数据
poolname= responseRunVo2.getString("poolname"); //第二层对象的数据
break;
}else{
continue;
}
}
log.info("cpid------>"+cpid);
log.info("poolname------>"+poolname);
vars.put("orcl_cpid",cpid);
vars.put("orcl_poolname",poolname);
//下个接口可以直接使用变量orcl_cpid与orcl_poolname获取结果值
return "成功返回";