第一种json格式


  1. {
  2. "code": 0,
  3. "msg": "success",
  4. "success": true,
  5. "data": [
  6. {
  7. "materialCode": "6902265111719",
  8. "materialName": "海天蒸鱼豉油450ml*12",
  9. "materialType": 1,
  10. "sixNineCode": "6902265111719",
  11. "expirationDate": 720,
  12. "packingSpecification": 12,
  13. "basicUnit": "BOX",
  14. "minSaleUnit": "BOT",
  15. "importFlag": 1,
  16. "transportFlag": 0,
  17. "sourceSystem": 10,
  18. "createrName": "MD自动转换物料",
  19. "updaterName": "loms",
  20. "pkId": "6902265111719",
  21. "mdMaterialCode": "6902265111719",
  22. "verifyStatus": 2,
  23. "creater": -2,
  24. "createTime": 1538984955619,
  25. "updater": -2,
  26. "updateTime": 1538984955619,
  27. "useStatus": 1
  28. },
  29. {
  30. "materialCode": "6902265113003",
  31. "materialName": "海天特辣黄豆酱230g*15",
  32. "materialType": 1,
  33. "sixNineCode": "6902265113003",
  34. "expirationDate": 720,
  35. "packingSpecification": 15,
  36. "basicUnit": "BOX",
  37. "minSaleUnit": "BOT",
  38. "importFlag": 1,
  39. "transportFlag": 0,
  40. "sourceSystem": 10,
  41. "createrName": "MD自动转换物料",
  42. "updaterName": "loms",
  43. "pkId": "6902265113003",
  44. "mdMaterialCode": "6902265113003",
  45. "verifyStatus": 2,
  46. "creater": -2,
  47. "createTime": 1538984956726,
  48. "updater": -2,
  49. "updateTime": 1538984956726,
  50. "useStatus": 1
  51. }
  52. ],
  53. "EnumVal": {}
  54. }
  55. ————————————————
  56. 版权声明:本文为CSDN博主「哈布哥」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
  57. 原文链接:https://blog.csdn.net/nitibu/article/details/83339858

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

  1. import org.json.JSONObject;
  2. import org.json.JSONArray;
  3. String result = prev.getResponseDataAsString();
  4. JSONObject response = new JSONObject(result);
  5. JSONArray array = response.getJSONArray("data");
  6. if (array.length() != 2) {
  7. Failure=true ;
  8. FailureMessage ="array size < 2";
  9. return;
  10. }
  11. int count = 0;
  12. for (int i = 0; i < 2; i++) {
  13. JSONObject temp = array.getJSONObject(i);
  14. String pkId = temp.get("pkId").toString();
  15. if (pkId.equals("6902265111719")) {
  16. if (!temp.get("materialCode").equals("6902265111719")) {
  17. Failure=true ;
  18. FailureMessage ="pkId: " + pkId + ", material code error, code = " + temp.get("materialCode");
  19. return;
  20. }
  21. if (!temp.get("materialName").equals("海天蒸鱼豉油450ml*12")) {
  22. Failure=true ;
  23. FailureMessage ="pkId: " + pkId + ", material name error, name = " + temp.get("materialName");
  24. return;
  25. }
  26. count++;
  27. }
  28. if (pkId.equals("6902265113003")) {
  29. if (!temp.get("materialCode").equals("6902265113003")) {
  30. Failure=true ;
  31. FailureMessage ="pkId: " + pkId + ", material code error, code = " + temp.get("materialCode");
  32. return;
  33. }
  34. if (!temp.get("materialName").equals("海天特辣黄豆酱230g*15")) {
  35. Failure=true ;
  36. FailureMessage ="pkId: " + pkId + ", material name error, name = " + temp.get("materialName");
  37. return;
  38. }
  39. count++;
  40. }
  41. }
  42. if (count != 2) {
  43. log.info("count != 2");
  44. Failure=true ;
  45. FailureMessage ="pkId not in range";
  46. return;
  47. }
  48. log.info(array.toString())
  49. ————————————————
  50. 版权声明:本文为CSDN博主「哈布哥」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
  51. 原文链接: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格式

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

代码如下:

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

Json 节点 的解析总结

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

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

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

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

解析的代码如下:

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

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

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

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

  1. {
  2. "priorityGroups": {
  3. "proId": 1234,
  4. "name": "项目一",
  5. "groups": [
  6. {
  7. "id": "50356",
  8. "items": [
  9. {
  10. "proId": 1360,
  11. "n": "PC端",
  12. "index": 1
  13. },
  14. {
  15. "proId": 1361,
  16. "n": "iOS端",
  17. "index": 2
  18. },
  19. {
  20. "proId": 1362,
  21. "n": "安卓端",
  22. "index": 4
  23. }
  24. ]
  25. }
  26. ]
  27. },
  28. "promotion": {
  29. "proId": 1364,
  30. "cusId": 84,
  31. "name": "项目二",
  32. "from": 1470821215,
  33. "to": 1470907615,
  34. "status": 1,
  35. "objectId": 1069,
  36. "createBy": 394,
  37. "eff": 1470821215000,
  38. "createTime": 1470821155000
  39. }
  40. }
  41. ————————————————
  42. 版权声明:本文为CSDN博主「sysu_lluozh」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
  43. 原文链接:https://blog.csdn.net/lluozh2015/article/details/72834014

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

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

  1. [
  2. {
  3. "properties":{
  4. "cal_name":"番木瓜",
  5. "e_type":"food",
  6. "end_index":6,
  7. "food_id":8520,
  8. "kcal_unit_weight":38.157,
  9. "name":"番木瓜",
  10. "start_index":3,
  11. "time_stamp":1566544101
  12. },
  13. "sub_properties":{
  14. "grams":200,
  15. "is_default":true,
  16. "quantifier_id":18,
  17. "quantity":1,
  18. "unit":"份"
  19. },
  20. "type":"Entity"
  21. },
  22. {
  23. "properties":{
  24. "cal_name":"木瓜",
  25. "e_type":"food",
  26. "end_index":2,
  27. "food_id":5801,
  28. "kcal_unit_weight":38.157,
  29. "name":"木瓜",
  30. "start_index":0,
  31. "time_stamp":1566544101
  32. },
  33. "sub_properties":{
  34. "grams":200,
  35. "is_default":true,
  36. "quantifier_id":18,
  37. "quantity":1,
  38. "unit":"份"
  39. },
  40. "type":"Entity"
  41. }
  42. ]

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

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

具体部分代码如下

  1. String response_data = prev.getResponseDataAsString();//获取请求返回值,此处获取到String类型;
  2. //JSONObject data_obj = new JSONObject(response_data);//将string类型的返回值构建成JSONObject对象
  3. //JSONArray data_array = response_data.getJSONArray[0];//返回结果是数组
  4. JSONArray data_array = new JSONArray(response_data);
  5. //返回数组对象
  6. JSONObject object = data_array.getJSONObject(0);
  7. //只获取响应结果中第一个properites的信息,需要取得多个properties,则可以使用for循环
  8. JSONObject temp_properties = (JSONObject)object.getJSONObject("properties");
  9. //只获取响应结果中properties中的calname值
  10. cal_name_string = temp_properties.getString("cal_name");
  11. log.info("Beanshell 后置处理器的提取的响应cal_name响应结果是:"+ cal_name_string);
  12. //保存响应结果中的cal_name变量
  13. vars.put("cal_name_string",cal_name_string);
  14. name_string = temp_properties.getString("name");
  15. log.info("Beanshell 后置处理器的提取的响应name_string响应结果是:"+ name_string);
  16. //保存响应结果中的cal_name变量
  17. 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. 个人永久性免费-Excel催化剂功能第22波-Excel文件类型、密码批量修改,补齐PowerQuery短板

    Excel的多工作薄.多工作表批量合并功能,Excel用户很多这方面的使用场景,也促使了各大Excel各大插件们都在此功能上有所开发,体验程度不一,但总体能够满足大多数的应用场景,本人之前也开发个单独 ...

  2. Excel催化剂开源第13波-VSTO开发之DataGridView控件几个小坑

    Excel催化剂内部大量使用了DataGridView,这其中有一些小坑,花了力气才解决的,在此给广大开发者作简单分享. 为何要使用DataGridView而不是其他控件如ListBox.ListVi ...

  3. http面试笔试常考知识点(一)

    1.什么是http HTTP是客户端和服务器端请求和应答的标准.通过使用Web浏览器.网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求.(我们称这个客户端)叫用 ...

  4. 机器学习-EM算法

    最大期望算法 EM算法的正式提出来自美国数学家Arthur Dempster.Nan Laird和Donald Rubin,其在1977年发表的研究对先前出现的作为特例的EM算法进行了总结并给出了标准 ...

  5. 转载——Asp.Net MVC+EF+三层架构的完整搭建过程

    转载http://www.cnblogs.com/zzqvq/p/5816091.html Asp.Net MVC+EF+三层架构的完整搭建过程 架构图: 使用的数据库: 一张公司的员工信息表,测试数 ...

  6. Django实现web端tailf日志文件

    这是Django Channels系列文章的第二篇,以web端实现tailf的案例讲解Channels的具体使用以及跟Celery的结合 通过上一篇<Django使用Channels实现WebS ...

  7. linux初学者-系统日志(一)

    linux初学者-系统日志(一) 系统日志可以记录系统的运行状态,如果运行故障,会说明错误的位置.所以对系统日志的了解和学习是非常有必要的. 1.系统日志的默认分类 系统日志会默认记录在以下地址中,不 ...

  8. Git实战

    Git实战 1.Git特点 1.1.Git两大特点 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题. 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器 ...

  9. python模块知识一 自定义模块、time、datetime时间模块

    第五章 模块 1.自定义模块: 模块分类: 内置模块(标准库)-- python解释器自带的.py文件(模块) 第三方模块(各种大神写的)-- 需要额外下载(并发编程pypi) 自定义模块(自己写的) ...

  10. 努力做一个优秀的programmer [ C# 影院售票系统]

    Cinema.cs类 [Serializable] // 电影院类 public class Cinema { public Cinema() { //二进制 SoldTickets = new Li ...