第一种json格式


{
"code": 0,
"msg": "success",
"success": true,
"data": [
{
"materialCode": "6902265111719",
"materialName": "海天蒸鱼豉油450ml*12",
"materialType": 1,
"sixNineCode": "6902265111719",
"expirationDate": 720,
"packingSpecification": 12,
"basicUnit": "BOX",
"minSaleUnit": "BOT",
"importFlag": 1,
"transportFlag": 0,
"sourceSystem": 10,
"createrName": "MD自动转换物料",
"updaterName": "loms",
"pkId": "6902265111719",
"mdMaterialCode": "6902265111719",
"verifyStatus": 2,
"creater": -2,
"createTime": 1538984955619,
"updater": -2,
"updateTime": 1538984955619,
"useStatus": 1
},
{
"materialCode": "6902265113003",
"materialName": "海天特辣黄豆酱230g*15",
"materialType": 1,
"sixNineCode": "6902265113003",
"expirationDate": 720,
"packingSpecification": 15,
"basicUnit": "BOX",
"minSaleUnit": "BOT",
"importFlag": 1,
"transportFlag": 0,
"sourceSystem": 10,
"createrName": "MD自动转换物料",
"updaterName": "loms",
"pkId": "6902265113003",
"mdMaterialCode": "6902265113003",
"verifyStatus": 2,
"creater": -2,
"createTime": 1538984956726,
"updater": -2,
"updateTime": 1538984956726,
"useStatus": 1
}
],
"EnumVal": {}
}
————————————————
版权声明:本文为CSDN博主「哈布哥」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nitibu/article/details/83339858

这个时候如果想得到data里面的materialCode字段信息,该如何操作呢,可以参考以下代码:

import org.json.JSONObject;
import org.json.JSONArray; String result = prev.getResponseDataAsString(); JSONObject response = new JSONObject(result);
JSONArray array = response.getJSONArray("data"); if (array.length() != 2) {
Failure=true ;
FailureMessage ="array size < 2";
return;
} int count = 0;
for (int i = 0; i < 2; i++) {
JSONObject temp = array.getJSONObject(i);
String pkId = temp.get("pkId").toString();
if (pkId.equals("6902265111719")) { if (!temp.get("materialCode").equals("6902265111719")) {
Failure=true ;
FailureMessage ="pkId: " + pkId + ", material code error, code = " + temp.get("materialCode");
return;
} if (!temp.get("materialName").equals("海天蒸鱼豉油450ml*12")) {
Failure=true ;
FailureMessage ="pkId: " + pkId + ", material name error, name = " + temp.get("materialName");
return;
}
count++;
} if (pkId.equals("6902265113003")) {
if (!temp.get("materialCode").equals("6902265113003")) {
Failure=true ;
FailureMessage ="pkId: " + pkId + ", material code error, code = " + temp.get("materialCode");
return;
} if (!temp.get("materialName").equals("海天特辣黄豆酱230g*15")) {
Failure=true ;
FailureMessage ="pkId: " + pkId + ", material name error, name = " + temp.get("materialName");
return;
}
count++;
}
} if (count != 2) {
log.info("count != 2");
Failure=true ;
FailureMessage ="pkId not in range";
return;
} log.info(array.toString()) ————————————————
版权声明:本文为CSDN博主「哈布哥」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nitibu/article/details/83339858

主要思路:

  1. 先通过prev.getResponseDataAsString获取到响应的返回结果,然后通过org.json.JSONObject(解析json)和org.json.JSONArray(解析数组)来解析返回的响应的结果。
  2. 解析出想要的json对象后,在for循环中对Json对象中每一个需要检测的值和预期进行对比,如果不正确,Failure设置为true,FailureMessage设置具体的错误信息。
  3. for循环中有可能一开始的pkId取值就和期望不一致,所以这个时候需要计算下遍历的计数count,如果计数和期望的不一致,则说明响应结果和期望结果的数量不一致。

第二种json格式

{
"responseCode":"1",
"responseMessage":"success",
"responseType":null,
"data":{
"city":"上海",
"rentUnit":"月",
"source":"个人房源网",
"title":"徐盈路1188弄徐泾青浦徐泾租房",
"belonger":"个人",
"housingType":"住宅",
"floor":"高层",
"rentPrice":"17000",
"titleLink":"http://sh.grfy.net/rent/d-34612565.html",
"decoration":null,
"direction":null,
"isSplit":"否",
"imgs":null,
"publishTime":"2018-07-25T23:20:33.471",
"contactMobile":null,
"website":"http://sh.grfy.net/rent/list_2_0_0_0-0_0_0-0_0_2_0_{}_.html",
"address":"徐泾",
"contactName":"王女士",
"houseType":"4室2厅2卫",
"estate":"徐泾",
"roomArea":"177",
"collectHouseType":"住宅",
"collectType":"出租",
"district":"青浦",
"totalFloor":"共20层",
"region":"上海",
"isRegister":"否",
"desc":"仁恒西郊花园 4室2厅2卫 房屋亮点 新上 配套齐全 有阳台 首次出租 随时看房 出租要求 一家人 一年起租 租户稳定 作息正常 房源描述小区环境好,物业管理成熟,私人会所实施配套齐全,临近地铁17号徐盈站,周边多所国际学校,仁恒的房子品质有保障。无中介费。"
}
}

代码如下:

import org.json.*;

//获取上一个请求的返回值
String response = prev.getResponseDataAsString();
//将返回值转换为json
JSONObject responseJson = new JSONObject(response);
//获取responseMessage
String message = responseJson.getString("responseMessage");
log.info("message的值:" + message); if(!message.equals("success")){
Failure = true;
FailureMessage = "规则解析失败,message不等于success";
return;
}
//思路:在后面的其他接口中如何需要使用变量message和titleLink,可以使用${message}和${titleLink}来获取变量的值; //变量储存好后,在需要断言的接口后面添加BeanShell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因,如:
//获取titleLink
Object titleLink = responseJson.getJSONObject("data").get("titleLink");
log.info("titleLink的值:" + titleLink.toString()); if(titleLink.toString().equals("null") || "".equals(titleLink)){
Failure = true;
FailureMessage = "规则解析失败,titleLink为空";
}else if(!titleLink.toString().startsWith("http") && !titleLink.toString().startsWith("https")){
Failure = true;
FailureMessage = "规则解析失败,titleLink不为空,但是不是以http或者https开头的";
}
————————————————
版权声明:本文为博客「 lwjnicole 」的文章,转载请附上原文出处链接及本声明。
原文链接:https://www.cnblogs.com/lwjnicole/p/9383872.html

Json 节点 的解析总结

json节点解析相比使用gson解析比较复杂。其实gson能满足大多数应用场合。在一些特殊情况下,例如只需要把json的一部分节点解析成javabean则需要根据json节点进行解析。

如何使用json节点进行解析? 当根节点是”{}”使用JsonObject。当跟节点是”[]”使用jsonArray。 示例代码:

解析根节点为”[]”的json:

[
{
"id": 1580615,
"name": "皮的嘛",
"packageName": "com.renren.mobile.android",
"iconUrl": "app/com.renren.mobile.android/icon.jpg",
"stars": 2,
"size": 21803987,
"downloadUrl": "app/com.renren.mobile.android/com.renren.mobile.android.apk",
"des": "2011-2017 你的铁头娃一直在这儿。中国最大的实名制SNS网络平台,嫩头青"
},
{
"id": 1540629,
"name": "不存在的",
"packageName": "com.ct.client",
"iconUrl": "app/com.ct.client/icon.jpg",
"stars": 2,
"size": 4794202,
"downloadUrl": "app/com.ct.client/com.ct.client.apk",
"des": "斗鱼271934走过路过不要错过,这里有最好的鸡儿"
}
] 作者:小二阳
链接:https://juejin.im/post/5a31e4396fb9a044fd11c6a8
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解析的代码如下:

JSONArray jsonArray=new JSONArray(json);
for(int i=0;i<jsonArray.length();i++){
JSONObject object=jsonArray.getJSONObject(i);
String id=object.getString("id");
String name=object.getString("name");
String packageName=object.getString("packageName");
String iconUrl = object.getString("iconUrl");
double stars=Double.parseDouble(object.getString("stars"));
String size=object.getString("size");
String downloadUrl = object.getString("downloadUrl");
String des = object.getString("des");
//其他操作
....
} 作者:小二阳
链接:https://juejin.im/post/5a31e4396fb9a044fd11c6a8
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解析根节点为”{}”的json:

{
"id": 1525490,
"name": "有缘网",
"packageName": "com.youyuan.yyhl",
"iconUrl": "app/com.youyuan.yyhl/icon.jpg",
"stars": 4,
"size": 3876203,
"downloadUrl": "app/com.youyuan.yyhl/com.youyuan.yyhl.apk",
"des": "产品介绍:有缘是时下最受大众单身男女亲睐的婚恋交友软件。有缘网专注于通过轻松、"
} 作者:小二阳
链接:https://juejin.im/post/5a31e4396fb9a044fd11c6a8
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 JSONObject object = new JSONObject(json);
long id = object.getLong("id");
String name = object.getString("name");
String packageName = object.getString("packageName");
String iconUrl = object.getString("iconUrl");
float stars = Float.parseFloat(object.getString("stars"));
long size = object.getLong("size");
String downloadUrl = object.getString("downloadUrl");
String des = object.getString("des"); 作者:小二阳
链接:https://juejin.im/post/5a31e4396fb9a044fd11c6a8
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

现在有更加复杂格式的respone数据:

{
"priorityGroups": {
"proId": 1234,
"name": "项目一",
"groups": [
{
"id": "50356",
"items": [
{
"proId": 1360,
"n": "PC端",
"index": 1
},
{
"proId": 1361,
"n": "iOS端",
"index": 2
},
{
"proId": 1362,
"n": "安卓端",
"index": 4
}
]
}
]
},
"promotion": {
"proId": 1364,
"cusId": 84,
"name": "项目二",
"from": 1470821215,
"to": 1470907615,
"status": 1,
"objectId": 1069,
"createBy": 394,
"eff": 1470821215000,
"createTime": 1470821155000
}
}
————————————————
版权声明:本文为CSDN博主「sysu_lluozh」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lluozh2015/article/details/72834014

如果需要解析groups中的数据,需要怎么实现呢?

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; String jsonContent = prev.getResponseDataAsString(); JSONObject response = new JSONObject(jsonContent);
JSONArray groups = response.getJSONObject("priorityGroups").getJSONArray("groups");
String strGroups = groups.toString();
————————————————
版权声明:本文为CSDN博主「sysu_lluozh」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lluozh2015/article/details/72834014

[
{
"properties":{
"cal_name":"番木瓜",
"e_type":"food",
"end_index":6,
"food_id":8520,
"kcal_unit_weight":38.157,
"name":"番木瓜",
"start_index":3,
"time_stamp":1566544101
},
"sub_properties":{
"grams":200,
"is_default":true,
"quantifier_id":18,
"quantity":1,
"unit":"份"
},
"type":"Entity"
},
{
"properties":{
"cal_name":"木瓜",
"e_type":"food",
"end_index":2,
"food_id":5801,
"kcal_unit_weight":38.157,
"name":"木瓜",
"start_index":0,
"time_stamp":1566544101
},
"sub_properties":{
"grams":200,
"is_default":true,
"quantifier_id":18,
"quantity":1,
"unit":"份"
},
"type":"Entity"
}
]

如图,响应结果的格式是[],根据上面的文档总结,我们可以总结一下思路:

  1. 首先使用prev.getResponseDataAsString()获取响应结果
  2. 使用JSONArray解析当前响应结果数据;
  3. 使用JSONObject得到json对象
  4. 使用JSONObject获取properties对象
  5. 使用getString取响应结果中properties中的calname
  6. 保存变量为jmeter变量,这样其他地方可以使用${}使用该变量了

具体部分代码如下

	String response_data = prev.getResponseDataAsString();//获取请求返回值,此处获取到String类型;
//JSONObject data_obj = new JSONObject(response_data);//将string类型的返回值构建成JSONObject对象 //JSONArray data_array = response_data.getJSONArray[0];//返回结果是数组
JSONArray data_array = new JSONArray(response_data);
//返回数组对象
JSONObject object = data_array.getJSONObject(0);
//只获取响应结果中第一个properites的信息,需要取得多个properties,则可以使用for循环
JSONObject temp_properties = (JSONObject)object.getJSONObject("properties");
//只获取响应结果中properties中的calname值
cal_name_string = temp_properties.getString("cal_name");
log.info("Beanshell 后置处理器的提取的响应cal_name响应结果是:"+ cal_name_string);
//保存响应结果中的cal_name变量
vars.put("cal_name_string",cal_name_string); name_string = temp_properties.getString("name");
log.info("Beanshell 后置处理器的提取的响应name_string响应结果是:"+ name_string);
//保存响应结果中的cal_name变量
vars.put("name_string",name_string);

至此,目前遇到的json解析问题依然解决了

使用BeanShell断言判断请求返回的Json相应结果(不同json格式整理)的更多相关文章

  1. 【Jmeter测试】如何使用BeanShell断言判断请求返回的Json相应结果

      脚本结构​上图中,queryMaterialApiDTOListByPkIds是返回Json格式响应结果的请求,然后添加BeanShell断言详细判断Json结果中的值是否正确. Json格式的相 ...

  2. Jmeter接口测试使用beanshell断言json返回

    一般情况下响应断言就能解决很多问题,但是返回复杂的json时就需要用到beanshell断言. 举个例子 免费的接口API www.sojson.com/api/beian/sojson.com ho ...

  3. 记录jmeter使用beanshell断言获取复杂的json字符串参数值

    实战示例 测试场景 电商系统经常会涉及到商品的库存数量的压测,在用户下单前需要先做库存余量的判断,当余量不足时用户无法下单,保证商品的有效售卖 库存余量查询响应结果 响应结果一般是json字符串的形式 ...

  4. jmeter 发送加密请求 beanshell断言 线程组间传递参数

    原文地址https://www.cnblogs.com/wnfindbug/p/5817038.html 最近在做http加密接口,请求头的uid参数及body的请求json参数都经过加密再发送请求, ...

  5. java 接口请求返回通用json

    public class BaseResponseBody { // 不能添加属性 仅做泛型使用 } public class ResponseBase<T extends BaseRespon ...

  6. Resource interpreted as Document but transferred with MIME type application/json laravel异常请求返回警告

    一般情况下,laravel在方法里可以向前端返回数组格式 return [], 框架可以自动将数组转成JSON字符串返回,但浏览器会报MIME类型警告, 如是做APP接口可以忽视该警告: 但在前端aj ...

  7. 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法

    在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法 最近在做一个小东西,使用kindeditor上传图片的时候,自己写了一个上传的方法,按照协议规则通过ajax返回json ...

  8. 学习网络请求返回json对应的model

    原来泛型可以这样用: 网络返回基类,返回一个code,msg,body,其中body不确定,所以,我们把它写成泛型 import org.json.JSONObject; /** * 网络请求的基类 ...

  9. shiro异步请求返回JSON响应

    shiro异步请求返回JSON响应 需求1:当shiro请求资源,但是没有进行认证时,默认是进行重定向,现在需要返回JSON响应.注意异步请求,服务器重定向后,ajax拿到的是浏览器重定向后的到的页面 ...

随机推荐

  1. MTSC2019第五届移动互联网测试开发大会PPT下载

    关注公众号「软件测试大本营」后台回复「MTSC」或「测试开发大会」即可获取云盘下载地址及提取码. 注:PPT文件版权归相关撰写人所有,仅供学习交流,请勿用于任何商业用途,谢谢 前不久在北京举办了第五届 ...

  2. 个人永久性免费-Excel催化剂功能第27波-Excel工作表设置快捷操作

    Excel催化剂在完善了数据分析场景的插件需求后,决定再补充一些日常绝大多数Excel用户同样可以使用到的小功能,欢迎小白入场,在不违背太多Excel最佳实践的前提下,Excel催化剂乐意为广大Exc ...

  3. 6.2.初识Flutter应用之路由管理

    路由管理 路由(Route)在移动开发中通常指页面(Page),这跟web开发中单页应用的Route概念意义是相同的,Route在Android中通常指一个Activity,在iOS中指一个ViewC ...

  4. RabbitMQ 实践之在处理异步任务中的流程

    一.背景: 我司的系统,用户可以创建任务,启动任务,但任务的运行需要很长的时间,所以采用消息队列的方式,后台异步处理. 这里所用到的是 RabbitMQ . 二.MQ 处理任务的流程 ① ② ③ ④ ...

  5. 以for循环的方式了解var与let的区别

    var是ES5定义变量的一种声明方式. let是ES6定义变量的一种声明方式---可定义局部变量,即定义块级作用域. 以下列简单的函数进行表现二者作用域的不同 在ES6之前,我们都是用var来声明变量 ...

  6. 【原创】这一次,Chrome表现和IE11一样令人失望,围观群众有:Edge,Firefox

    前言 俗话说,常在河边走哪能不湿鞋,天天和浏览器打交道,发现浏览器竟然也隐藏BUG也不是新鲜事了.可以看下我之前的文章: [原创]分享IE7一个神奇的BUG(不是封闭标签的问题,的确是IE7的BUG) ...

  7. linux初学者-磁盘拉伸缩减篇

    linux初学者-磁盘拉伸缩减篇 在系统的使用过程中,往往会出现这样的问题,由于刚开始无法估计需要的磁盘空间,导致后期磁盘空间不够,使得数据没地方存储,又或者后期磁盘空间过大,造成资源的浪费.这种在使 ...

  8. ubuntu防火墙规则之ufw

    前言 因公司项目的需求,需要对客户端机器简便使用防火墙的功能,所以可在页面进行简便设置防护墙规则,当然,这个功能需求放到我手上我才有机会学到.因为客户端机器都是ubuntu的,所以当然用了ubuntu ...

  9. android 界面提示框架WisdomProgressHUD,为金典而生

    一:简述 今天给android开发者们,推荐一个金典的界面提示框架WisdomProgressHUD,使用简洁方便. WisdomProgressHUD 是一个半透明的 HUD 指示器. Wisdom ...

  10. DevOps相关知识点

    DevOps 持续集成 简述 持续集成简称CI,是软件的开发和发布标准流程的最重要的部分 作为一个开发实践,在C中可以通过自动化等手段高频地去获取产品反馈并响应反馈的过程 简单的来说,持续集成就是持续 ...