在之前写过提取json数据格式的文章,这次对jmeter读取json数据格式进行整理。

  举例一个接口的response 格式如下:

{
"data" : {
"device_vec" : [
{
"agent_version" : "9.7.0.2225",
"android_id" : "e3d699cf01620531",
"asset_number" : "",
"description" : "89vUwdwfVydEjqNAANxM11c72ujdmn",
"device_name" : "357568061882002",
"email" : "1504487508089@tt.com",
"encryption_log_count" : 0,
"encryption_version" : "",
"engine_version" : "9.715-1024",
"firewall_log_count" : 0,
"firewall_version" : "",
"group_id" : "aa000000-0000-0000-0000-000000000000",
"group_name" : "Default",
"id" : "35756806-1882-0020-0000-000000000000",
"imei" : "357568061882002",
"inactive_reason" : 0,
"install_time" : 1503642124,
"last_connected_time" : 1504742375,
"last_scan_time" : 1503642674,
"meid" : "",
"noncomp_reason" : "",
"os_version" : "4.3",
"pattern_version" : "2.437.00",
"phone_number" : "",
"platform_type" : 512,
"policy_id" : 32,
"policy_name" : "",
"security_status" : 3,
"status" : 3,
"user_name" : "test1504487508089",
"virus_log_count" : 26,
"wtp_log_count" : 0
},
{
"agent_version" : "2.0.0.1518",
"android_id" : "",
"asset_number" : "",
"description" : "3dLAbTlj7UQoOiodnAjDrfX1iI0PCx",
"device_name" : "Michael’s iPhone",
"email" : "1504487508089@tt.com",
"encryption_log_count" : 0,
"encryption_version" : "",
"engine_version" : "",
"firewall_log_count" : 0,
"firewall_version" : "",
"group_id" : "aa000000-0000-0000-0000-000000000000",
"group_name" : "Default",
"id" : "6954500b4f14e50bd20634481ee2c6d9f17b4ee3",
"imei" : "35 445006 267069 9",
"inactive_reason" : 0,
"install_time" : 1503641446,
"last_connected_time" : 1503652862,
"last_scan_time" : 1503641477,
"meid" : "35445006267069",
"noncomp_reason" : "",
"os_version" : "10.3.2",
"pattern_version" : "",
"phone_number" : "",
"platform_type" : 1024,
"policy_id" : 6,
"policy_name" : "",
"security_status" : 1,
"status" : 3,
"user_name" : "test1504487508089",
"virus_log_count" : 0,
"wtp_log_count" : 0
}
],
"total_count" : 2
},
"error_code" : 1,
"message" : "Success",
"timestamp" : 1504765848
}

下面就对device_vec取角标2的agent_version 参数进行提取。

方法一:Jmter Json插件,JSON Path Extractor 提取器。

处理Json数据的方法是使用JMeter的插件,该插件可以使用JSONPath来获取JSON数据中特定位置的数据。类似于XML文件中的XPath,JSONPath可以使用简单的表达式来操作Json对象。JSON Path Extractor是一个开源的增加了post处理器的插件,可以将该插件的Lib文件拷贝到JMeter的lib目录下或者通过Jmeter UI界面的Options-->Plugins Manager下载json插件即可。

可以使用如下的JSONPath进行描述:

$.data.device_vec[1].agent_version

在JMeter中,只需要从PostProcessor菜单中打开JSON Path Extractor然后输入变量名与默认值即可,如下所示:

JSONPath表达式较短并且易于阅读,能够有效提高测试脚本的易维护性,该插件并不随着标准的JMeter一起安装。

方法二:Jmter 正则表达式插件,正则表达式提取

JMeter安装了正则表达式插件之后,可以按照固定的格式从字符串中提取数据,而本例中正则表达式如下所示:

"agent_version":"(.+?)"

使用了该表达式之后会返回所有服从表达式的字符串,但是只有一个表达式是我们所关注的。可以使用1个组作为模板($1$),而2则会返回第二个数据。

方法三:Jmter BeanShell提取器, BeanShell提取器

借用了JMeter的对于BeanShell支持的特性,BeanShell是一个轻量级的面向Java的脚本语言。BeanShell Post Processor允许使用标准的Java语法来处理Json数据,使用方法如下图所示:

1.写一个jsonpath读取代码如下:

import java.util.LinkedHashMap;

import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Predicate; import net.minidev.json.JSONArray; public class GetJson {
public static String readjson(String json, String jsonPath){
try{
Object value = JsonPath.read(json, jsonPath, new Predicate[0]);
if (value instanceof Integer){
return value.toString();
}else if (value instanceof String){
return value.toString();
}else if (value instanceof Boolean){
return value.toString();
}else if (value instanceof JSONArray){
JSONArray arr = (JSONArray)value;
if(!arr.isEmpty()){
return arr.toJSONString();
}else
return "";
}else if (value instanceof LinkedHashMap){
return value.toString();
}else if (value instanceof Float) {
return value.toString();
}else{
return value.toString();
}
}catch(Exception e){
return "pathnotfound";
}
}
}

然后使用此方法来读取json数据格式

2.导入com.eclipsesource.json 方法直接读取json

com.eclipsesource.json,源码下载路径如下 https://github.com/ralfstx/minimal-json,只需将源码打成jar包放到jmeter的lib/ext目录下即可

com.eclipsesource.json 适用方法:http://static.javadoc.io/com.eclipsesource.minimal-json/minimal-json/0.9.3/com/eclipsesource/json/JsonObject.html

3.如果是循环读取,那就要算出List的长度做循环---用jsonpath读取方式去循环取(前面的jsonpath方法不再贴)

4.如果是循环读取,那就要算出List的长度做循环---用com.eclipsesource.json api 读取方式循环读

如下:

总结

本文列举出了三种可用的从Json格式的返回值中提取数据的方法,正则表达式对于简单的Json格式的数据的快速标准化非常占优势。而JsonPath插件可以用于创建能够被维护修改的脚本,但是需要额外的插件安装工作。而最后的带JSON库的BeanShell确实非常详细并且依赖于Java语言的灵活性可以进行进一步的开发。

json几种读取方式,ArrayList循环读取【转】的更多相关文章

  1. jmeter ---json几种读取方式,ArrayList循环读取

    在之前写过提取json数据格式的文章,这次对jmeter读取json数据格式进行整理. 举例一个接口的response 格式如下: { "data" : { "devic ...

  2. 第63天:json的两种声明方式

    一. json 两种声明方式 1. 对象声明   var  json = {width:100,height:100} 2. 数组声明   var  man = [        //  数组的 js ...

  3. Perl读取标准输入<STDIN>、读取文件输入<>和chomp函数

    读取标准输入<STDIN> <STDIN>表示从标准输入中读取内容,如果没有,则等待输入.<STDIN>读取到的结果中,如果没有意外,都会自带换行符. 例如,tes ...

  4. C++中文件按行读取和逐词读取 backup

    http://blog.csdn.net/zhangchao3322218/article/details/7930857 #include  <iostream>#include  &l ...

  5. js循环读取json数据,将读取到的数据用js写成表格

    ①js循环读取json数据的方式: var data=[{"uid":"2688","uname":"*江苏省南菁高级中学 022 ...

  6. 5种高大上的yml文件读取方式,你知道吗?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 在上一篇文章中,我们从源码角度分析了SpringBoot解析yml配置文件的全流程,那么我们今天就来点实战,总结一下除了烂大街的@Value和@ ...

  7. Java中9种IO的读取方式

    数据的读写,按照数据类型可以分为两种:字符流和字节流(二者区别?).所以数据读取方式按照数据类型也可以分为两类:字节流的读取和字符流的读取. 一.字节流读取操作: |  | |-----1.FileI ...

  8. .Net中XML,JSON的几种处理方式

    一.XML: 1.基本了解: xml,Extensible markup language可扩展标记语言,用于数据的传输或保存,特点,格式非常整齐数据清晰明了,并且任何语言都内置了xml分析引擎, 不 ...

  9. Matlab如何循环读取文件

    循环读取图片第一种方法①List =dir('*.jpg'); %如需其它图片格式支持,可以自己[重载dir()]函数,实现查找所有图片文件的功能,%如果图片是其它路径,可以用 ["路径&q ...

随机推荐

  1. S2SH整合所需jar包及其详解

    转自:https://blog.csdn.net/vvvac1314/article/details/44002205 struts2所必须的jar包五个:struts2-core-2.1.6.jar ...

  2. Android 自定义带回调的Dialog 及EditText相关

      import android.app.Activity; import android.content.Context; import android.text.Editable; import ...

  3. taglib标签在web.xml文件中报错的解决办法

    报错的原因分析: 在jsp2.0中,且2.4版的DTD验证中,taglib描述符,正确写法是放到<jsp-config></jsp-config>描述符中.所以,我们的tagl ...

  4. while 用法 for 循环的总结

    格式化输出.%s %d # name = input('请输入名字:') # age = input('请输入年龄:') # sex = input('请输入性别:') # # msg = '我的名字 ...

  5. js面试题知识点全解(一原型和原型链)

    1.如何准确判断一个变量是数组类型2.写一个原型链继承的例子3.描述new一个对象的过程4.zepto(或其他框架)源码中如何使用原型链知识点:1.构造函数2.构造函数-扩展3.原型规则和示例4.原型 ...

  6. SpringMVC_04 拦截器 【拦截器的编程步骤】【session复习?】

    待更新... 2017年5月13日22:45:31 1 什么是拦截器  spring提供的一个特殊组件,前端控制器 DispacherServlet 在收到请求之后,会先调用拦截器,再调用处理器(Co ...

  7. 在Mac OS里安装和升级Git

    在此记录,给自己看,也给别人参考. 进入终端,查看当前Git版本,输入指令:git --version 输入which git回车,可以查看当前git在什么位置 经查,版本:2.10.0,版本较低,为 ...

  8. 设置 PyCharm 软件中 Terminal 窗口 中启动的 python 交互命令的版本

    设置 PyCharm 软件中 Terminal 窗口 中启动的 python 交互命令的版本 python2 和 python3 有很大的不同,使用python2 编写的程序,如果使用python3 ...

  9. CF1030F Putting Boxes Together

    昨晚的比赛题.(像我这种蒟蒻只能打打div2) 题意 给你$n$个物品,每一个物品$i$,有一个权值$w_i$和一个位置$a_i$,定义移动一个物品$i$到位置$t$的代价为$w_i * \left ...

  10. Ubuntu相关IP配置(转)

    配置文件:/etc/network/interfaces 打开后里面可设置DHCP或手动设置静态ip.前面auto eth0,让网卡开机自动挂载. 1. 以DHCP方式配置网卡 编辑文件/etc/ne ...