日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

BeanShell使用json.jar包处理Json数据

發(fā)布時(shí)間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BeanShell使用json.jar包处理Json数据 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

環(huán)境準(zhǔn)備

  ①Jmeter版本 ,JDK?

  ②前置條件:將json.jar包置于..\lib\下,

      如果還是報(bào)錯(cuò),可以將該jar包添加到測(cè)試計(jì)劃的Library中;否則會(huì)報(bào):Typed variable declaration : Class: JSONObject not found in namespace的錯(cuò)誤;

  ③處理器:Beanshell處理器,import org.json.*;  

      也可以 import org.json.JSONObject;、import org.json.JSONAarry;主要是處理這兩種類型的數(shù)據(jù),Json對(duì)象和Json數(shù)組

eg:例子來源于https://blog.csdn.net/weixin_42204641/article/details/82850659

 JSONObject:{"name":"tom"}、{"name":["tome","kate"]}            

// 先設(shè)置1個(gè)JSONObject、一個(gè)JSONArray ?
JSONObject jsono = new JSONObject();
JSONArray ?jsona = new JSONArray();//JSONArray傳值
jsona.put("tom");
jsona.put("kate");//["tom","kate"]//JSONObject傳值
jsono.put("name",jsona);//{"name":["tom","kate"]}

? ?JSONAarry:[{"name":"tom"},{"name":"kate"}]

JSONArray jsona = new JSONArray();JSONObject jsono1 = new JOSNObject();JSONObject jsono2 = new JSONObject();jsono1.put("name","tom");//{"name":"tom"}
jsono2.put("name","kate");//{"name":"kate"}

jsona.put(json1,json2);//[{"name":"tom"},{"name":"tom"}]

主流思想

  1.獲取response返回的數(shù)據(jù)(返回值)    

    String response_data = prev.getResponseDataAsString();?//自定義一個(gè)變量response_data,來獲取請(qǐng)求的返回值String

  2.利用上一步獲取的字符串形式的JSON,結(jié)合Java處理Json的方法,將需要的鍵值提取出來;

    JSONObject response =??new JSONObject(response_data); //自定義一個(gè)對(duì)象response,將返回值構(gòu)造JSON對(duì)象

    這里構(gòu)造的是JSONObject(對(duì)象JSON)也可以自己構(gòu)造JSONAarry(數(shù)組對(duì)象)方法是一樣的  JSONArray jsona = new JSONArray();

  3.獲取需要拿到的數(shù)據(jù)

    String total_metaData = response.get("data").get("pageMetaData").get("totalSize").toString();? ?//.get("data").get("pageMetaData")

?  4.設(shè)置為Jmeter中的全局變量,供后續(xù)使用

    vars.put("total_meta",total_metaData);      //這里設(shè)置的全局變量,在本腳本中無效--${total_meta}是錯(cuò)誤的

【示例1-----JSONObject對(duì)象】

  ①獲取到JSON對(duì)象,需要提取其中的data對(duì)象,并更換“issueHandleType”字段的值為“CLOSE”,再構(gòu)造成參數(shù)字符串;

?

  A請(qǐng)求后添加BeanShell后置處理器,代碼如下:

import org.json.*;String response_data = prev.getResponseDataAsString(); //獲取請(qǐng)求返回值。注意此處只能獲取到String類型;
log.info(response_data);JSONObject data_obj = new JSONObject(response_data); //將String類型的返回值構(gòu)造成JSONObject對(duì)象,才可使用Java對(duì)象的方法對(duì)其進(jìn)行操作;

String StrData = data_obj.get("data").toString(); //獲取作為下一個(gè)請(qǐng)求post的參數(shù)值data;
log.info(StrData); //Log中顯示的字段順序會(huì)與“response_data”中的字段順序有差異,JSON串的正確與否無關(guān)字段順序;

JSONObject JsonData = new JSONObject(StrData); //將獲取到的“data”字符串構(gòu)造成JSON對(duì)象;

JsonData.put("issueHandleType", "CLOSE"); //更新issueHandleType的json值;
JsonData.put("solution", "2017_解決方案_性能測(cè)試");
JsonData.put("status", "CLOSED");
JsonData.put("handleType", "CLOSE");
JsonData.put("complaintTypeSecondCode", "URGE"); //異常類型;
JsonData.put("complaintTypeSecondName", "催件"); 
JsonData.put("lastUpdateTime", "${timestamp}");
JsonData.put("lastUpdator", "${UserName}");
JsonData.put("lastUpdatorName", "${UserName}");String NewData = JsonData.toString(); //將JSON對(duì)象保存為String類型,Jmeter中的請(qǐng)求的參數(shù)均以字符串的形式傳遞; 
vars.put("NewStrData",NewData);
log.info(NewData);

【示例2-----JSONArray對(duì)象】

  需要提取返回值中,每一個(gè)對(duì)象數(shù)組中的每一個(gè) uuid 及 id 的鍵值:獲取JSON對(duì)象,再提取data數(shù)組內(nèi)容并獲取data數(shù)組長度,最后循環(huán)提取每一個(gè) uuid 及 id 的鍵值;備注:1個(gè)客服同時(shí)與10個(gè)客戶聊天,在聊天開始之前,需要撈取到這10個(gè)客戶的uuid(uuid)及conversationId(id);

//import org.json.*;
import
org.json.JSONObject; import org.json.JSONArray;try {String response_data = prev.getResponseDataAsString(); //獲取請(qǐng)求返回值。注意此處只能獲取到String類型;JSONObject data_obj = new JSONObject(response_data); //將String類型的返回值構(gòu)造成JSONObject對(duì)象; JSONArray data_array = data_obj.getJSONArray("data"); //data為數(shù)組int len = data_array.length(); //獲取data數(shù)組的長度String strlen = Integer.toString(len);vars.put("MessageNum",strlen);//log.info(strlen);int i = 0;for(;i < len;++i){JSONObject jsonTemp = (JSONObject)data_array.getJSONObject(i); //獲取 data[ i ] 數(shù)組對(duì)象;switch(i){case 0: vars.put("uuid_1", jsonTemp.getString("uuid")); vars.put("conversationId_1", jsonTemp.getString("id")); break;case 1: vars.put("uuid_2", jsonTemp.getString("uuid")); vars.put("conversationId_2", jsonTemp.getString("id")); break;//..................................此處省去7次處理case 10: vars.put("uuid_11", jsonTemp.getString("uuid")); vars.put("conversationId_11", jsonTemp.getString("id")); break;default:break;}} } catch (Throwable ex) {log.error("Failed in Beanshell", ex);throw ex; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/nieliangcai/p/10535194.html

總結(jié)

以上是生活随笔為你收集整理的BeanShell使用json.jar包处理Json数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。