精华内容
下载资源
问答
  • java json部分信息提取

    2017-04-08 10:53:22
    cb({"result":[["iphon6plus手机壳","26152"],["iphon6splus","29586"],["iphon6splus钢化膜","3176"],["iphon6splus 手机","27687"],["iphon6splus壳","21148"],["iphon...我想提取每个[]中第一个引号中的内容 求指教
  • jmeter的json提取器提取数据

    千次阅读 2021-01-27 17:50:41
    运行返回的token,添加后置处理器-Json提取器 从返回的结果中提取token值 下个请求头部需要用到上面的token值,在信息头管理器引用token参数 ${token} 注意:①需要把第一个请求的的客户端实现用JAVA方式...

    在接口测试中有一个这样的场景:登录之后,返回一个json数据,token值在返回的json里面,在jmeter里面也可以直接提取json里面的值,应用在下一个接口,怎么实现?

    1、一个变量获取一个数据

    登录请求:运行返回的token,添加后置处理器-Json提取器

    从返回的结果中提取token值

    下个请求头部需要用到上面的token值,在信息头管理器引用token参数 ${token}

     

    JSON提取器说明:

    Apply to:应用范围

    Names of created variables :接收值的变量名,自定义,多个变量用分号分隔 

    JSON Path expression: json path表达式,也是用分号分隔 

    Match No.(0 for Random):0表示随机;n取第几个匹配值;-1匹配所有。若只要获取到匹配的第一个值,则填写1

    Compute concatenation var(suffix_ALL):如果找到许多结果,则插件将使用' , '分隔符将它们连接起来,并将其存储在名为<variable name> _ALL的var中

    Default Values: 缺省值,匹配不到值的时候取该值,可写error。

    2、多个变量提取数据

    获取多个值时,变量名、json路径、匹配值、缺省值要用分号间隔。这里的缺省值Default Values要加上,不然不能获取多个变量。

     

    注意

    ①需要把第一个请求的的客户端实现用JAVA方式实现,才能正常的关联成功;

    ②JSON Path expressions表达式要根据根元素的属性往子节点找,本文的案例token是在result的下一节点,所以路径是$.result.token;

    ③方便检查通过json提取器是否正常获取到值,可添加Debug PostProcessor来检查,注意正常跑用例时删除或禁用它。

    3、json提取器设置1个变量获取多个数据

    我们会碰到获取一个变量,但结果是多个数据的情况。

    ①例如“抽奖活动列表查询”这个请求结果

    如果想要获取到这里所有的活动sweepstakeID,json路径表达式可以这样写:$.result.items..sweepstakeID或者$.result.items[*].sweepstakeID

    ②添加JSON提取器,获取所有活动的sweepstakeID信息

    添加Debug PostProcessor来调试用,正常跑用例删除或禁用它。可查看到获取到了所有活动的sweepstakeID值。通过sweepstakeID_1,...到sweepstakeID_10可得到每一个sweepstakeID。

    ③将获取到每一个活动sweepstakeID循环“抽奖活动详情”查看

    添加循环控制器,设置循环次数

    在循环控制器之下添加“抽奖活动详情”请求,并做以下设置

    因为要把JSON提取器中匹配到的sweepstakeID_1,...到sweepstakeID_10循环传递给“抽奖活动详情”,

    __counter为jmeter自带的一个计数函数,${__counter(,)}引用这个函数,每运行1次+1,从1开始;

    sweepstakeID_${__counter(,)}运行第1次sweepstakeID_1,运行第2次sweepstakeID_2,以此类推,直到运行到循环次数sweepstakeID_10

    __V为jmeter自带的一个嵌套变量函数,运行第1次sweepstakeID_${__counter(,)}为sweepstakeID_1,${__V(sweepstakeID_${__counter(,)},)}则为${sweepstakeID_1},值107;以此类推,一直循环到${sweepstakeID_10}

    以上为jmeter工具栏tools-->函数助手对话框界面,可以去选择帮助查看对应函数的功能说明。快捷键调出Ctrl+Shift+F1

    运行后查看结果如下图:

    参考原文https://www.cnblogs.com/tudou-22/p/12579575.html

    展开全文
  • java提取json格式字符串

    千次阅读 2016-01-29 13:30:11
    java提取json字符串

    导入的jar包:
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;

    java代码:

    //json字符串
     String place="{"address":"CN|吉林|长春|None|CERNET|0|0","content":{"address_detail":{"province":"吉林省","city":"长春市","district":"","street":"","street_number":"","city_code":53},"address":"吉林省长春市","point":{"y":"5419815.34","x":"13950002.65"}},"status":0}";
    
            //转化为json用来提取
             JSONObject json = JSON.parseObject(place);
             //获取对应key的值
             String a1=json.getString("address");
             String a2=json.getString("content");
             System.out.println(a1);
             //结果:CN|吉林|长春|None|CERNET|0|0
             System.out.println(a2);
             //结果:{"address_detail":{"province":"吉林省","city":"长春市","district":"","street":"","street_number":"","city_code":53},"address":"吉林省长春市","point":{"y":"5419815.34","x":"13950002.65"}}
    
             //将a2部分作为json字符串提取出来。
             JSONObject json2 = JSON.parseObject(a2);
             //提取key:content里面的key为address_detail的值
             String a3=json2.getString("address_detail");
             System.out.println(a3);
             //结果:{"province":"吉林省","city":"长春市","district":"","street":"","street_number":"","city_code":53}
             //继续提取key为address_detail里面的内容
             JSONObject json3 = JSON.parseObject(a3);
             String city=json3.getString("city");
             //获取key为city的内容
             System.out.println(city);
             String province=json3.getString("province");
             //获得key为province的内容
             System.out.println(province);
    展开全文
  • JMeter关联:JMeter正则表达式提取器与JSON提取

    万次阅读 多人点赞 2019-06-21 17:22:31
    JMeter关联的实现1、关联的释义与简单示例2、常用正则表达式详解3、正则表达式提取器2、JSON提取 前言:下文中会多次使用到【BeanShell Sampler】和【Debug Sampler】,前者的作用是模拟一个请求,返回自定义的...

    前言

    本文主要内容是:使用使用正则表达式提取器和JSON提取器实现关联。

    下文中会多次使用到BeanShell SamplerDebug Sampler,前者其实是起到一个mock server的作用,返回自定义的响应结果,后者能够输出JMeter的变量情况。

    关于JMeter的使用,花费大量精力写了JMeter的一系列文章,有图有案例,一方面总结起来作为备忘,一方面希望能给初学者一些帮助。觉得有所帮助的朋友,请点个赞,对于疏漏之处也欢迎指教。

    1 关联的释义与示例

    关联在接口测试中是一个非常重要的概念,它的意思是在两个或多个接口间建立逻辑上的依赖与联系。

    关联的使用场景往往要满足以下条件:

    1. A接口响应结果中的数据被后续的接口所引用
    2. A接口响应结果中被后续接口引用的数据是动态变化且无法提前预知的

    例如,登录接口-下订单接口这样2个接口组成的流程,就是非常典型的关联案例。

    首先,登录接口返回包含用户身份认证信息的token,后续的下订单接口需要附带上这个token才能被服务器识别身份。

    Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

    要想实现这个场景,我们需要这么做:

    1. 在登录接口响应结果中将token提取出来并保存在变量中,这里可以使用【正则表达式提取器】和【JSON提取器】。
    2. 在后续接口中引用已经保存好的token,一般通过【HTTP信息头管理器】

    形成的脚本如下。

    1、登录接口的响应结果:

    {
    	"code" : 200,
    	"msg" : "SUCCESS",
    	"data" : {
    		"accessToken" : "PJqx4566Ggf10qJv6firYAFS408p0us",
    		"info" : {
    			"id" : 10000,
    			"level" : 0,
    			"twiceGoogleAuth" : false,
    			"twiceMobileAuth" : true,
    			"twiceEmailAuth" : false,
    			"tradePwdAlways" : false,
    			"tradePwdHours" : false,
    			"lastLoginDate" : null,
    			"lastLoginAddress" : null,
    			"depositFlag" : true,
    			"loginCount" : 0,
    			"emailRegister" : false,
    			"nation" : 211,
    			"webLoginCount" : 0
    		}
    	}
    }
    

    2、从登录接口响应结果中提取token的值,并保存到名称为myToken的变量中:
    在这里插入图片描述

    3、引用前面保存的token值(前面保存变量为什么,这里就引用什么)
    在这里插入图片描述
    4、后续接口中,成功引用了到了myToken的值:
    在这里插入图片描述

    接下来,我们以 WeatherWS 这个网站的两个接口为示例,使用【正则表达式提取器】完成一个关联实现。

    接下来的测试场景是这样的:

    1. 请求 getRegionProvince 接口,得到包含各个省份 code 的列表,并在这个列表里提取北京code
    2. 将北京的 code 作为getSupportCityDataSet接口 theRegionCode 参数的参数值,请求接口得到北京下辖的行政区域列表。

    在这里插入图片描述
    getRegionProvince的接口说明如下:

    GET /WebServices/WeatherWS.asmx/getRegionDataset? HTTP/1.1
    Host: ws.webxml.com.cn
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    
    <?xml version="1.0" encoding="utf-8"?>
    <DataSet xmlns="http://WebXml.com.cn/">
      <schema xmlns="http://www.w3.org/2001/XMLSchema">schema</schema>xml</DataSet>
    

    getSupportCityDataSet的接口说明如下:

    GET /WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode=string HTTP/1.1
    Host: ws.webxml.com.cn
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    
    <?xml version="1.0" encoding="utf-8"?>
    <DataSet xmlns="http://WebXml.com.cn/">
      <schema xmlns="http://www.w3.org/2001/XMLSchema">schema</schema>xml</DataSet>
    

    根据上面的接口说明,先建立下面的脚本:
    在这里插入图片描述
    整体的脚本结构如上图所示,下面依次看每个组件的内容和作用。

    1、【HTTP请求】getRegionProvince
    在这里插入图片描述

    1. IP:ws.webxml.com.cn
    2. 路径:/WebServices/WeatherWS.asmx/getRegionDataset
    3. 作用:获得中国省份、直辖市、地区;国家名称(国外)和与之对应的ID
    4. 相应结果(为节省篇幅,删除了大量无关数据):
    <?xml version="1.0" encoding="utf-8"?>
    <DataSet xmlns="http://WebXml.com.cn/">
      <xs:schema id="getRegion" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
      </xs:schema>
      <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
        <getRegion xmlns="">
          <Province diffgr:id="Province5" msdata:rowOrder="4">
            <RegionID>3117</RegionID>
            <RegionName>河北</RegionName>
          </Province> 
          <Province diffgr:id="Province29" msdata:rowOrder="28" diffgr:hasChanges="inserted">
            <RegionID>311101</RegionID>
            <RegionName>北京</RegionName>
          </Province>
         <Country diffgr:id="Country1" msdata:rowOrder="0">
            <RegionID>3320</RegionID>
            <RegionName>阿尔及利亚</RegionName>
          </Country>
        </getRegion>
      </diffgr:diffgram>
    </DataSet>
    

    观察相应结果,北京的RegionID是311101,但如何将它提取出来并保存到变量中呢?这就要用到【正则表达式提取器】了。在HTTP请求getRegionDataset上添加【后置处理器】-【正则表达式提取器】。

    2、【正则表达式提取器】:
    在这里插入图片描述

    1. 引用名称:code,后面引用该值时,将使用${code}的固定写法。
    2. 正则表达式:<RegionID>(.+?)</RegionID>\r\n\ <RegionName>北京</RegionName>,注意中间的8个空格,不能多一个也不能少一个。
    3. 模板:$1$,表示取第一列,下文【正则表达式提取器】会有详细解释。
    4. 匹配数字:1,表示取第一行,下文【正则表达式提取器】会有详细解释。

    3、【HTTP请求】getSupportCityDataSet
    在这里插入图片描述

    1. IP:ws.webxml.com.cn
    2. 路径:/WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode=${code}
    3. 作用:获得支持的城市/地区名称和与之对应的ID
    4. 相应结果:
      在这里插入图片描述
      在这里插入图片描述

    2 常用正则表达式详解

    正则表达式描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

    正则表达式是相对繁琐抽象的,理解和记忆难度较高,因此这里对JMeter中能用到的正则表达式语法(主要是限定符)进行一下讲解。

    据我个人经验,(.+?)这个表达式基本就够用了,何况正则表达式提取远不如JSON提取器使用频率高,所以这一节大可以略过,直接看第三节。

    字 符描 述
    .匹配除换行符 \n 之外的任何单字符
    *贪婪,匹配前面的子表达式零次或多次,等价于{0,}
    +占有,匹配前面的子表达式一次或多次,等价于{1,}
    ?懒惰,匹配前面的子表达式零次或一次 ,等价于 {0,1}
    {n}n 是一个非负整数。匹配确定的 n 次。例如a{3}匹配“aaaaa”,能匹配到“aaa”
    {n,m}重复n到m次,例如正则 “a{3,4}” 将a重复匹配3次或者4次
    *?重复任意次,但尽可能少重复,如 “acbacb” 正则 “a.*?b” 只会取到第一个"acb"
    +?重复1次或更多次,但尽可能少重复,与上面一样,不同的是至少重复一次
    ??重复0次或1次,但尽可能少重复,如 “aaacb” 正则 “a.??b” 只会取到最后的三个字符"acb"
    {n,m}?重复n到m次,但尽可能少重复,如 “aaaaaaaa” 正则 “a{0,m}” 因为最少是0次所以取到结果为空
    {n,}?重复n次以上,但尽可能少重复,如 “aaaaaaa” 正则 “a{1,}” 最少是1次所以取到结果为 “a”

    部分表达式使用【正则表达式测试器】实测结果如下:

    1. *:0次或多次,因为0个也被能匹配,所以b、c和末尾被匹配成空
      在这里插入图片描述
    2. +:一个或多个,因为至少要匹配一个,不会有空字符串
      在这里插入图片描述
    3. :0个或一个,同*一样,没有a的被匹配成空字符串
      在这里插入图片描述
    4. a{n}:
      在这里插入图片描述
    5. a{n,m}
      在这里插入图片描述
    6. a{n,}
      在这里插入图片描述

    3 正则表达式提取器

    正则表达式提取器一般在取样器上创建,它的作用是在取样器(包括HTTP请求和BeanShell Sampler及其他取样器)的结果中按照一定的规则提取特定的值,并保存到内存中的某一个字段上,正则表达式所在的取样器之后的组件,都能通过引用方式(格式:${XXX})使用该值。
    在这里插入图片描述

    3.1 参数详解

    名称描述必须
    名称脚本中显示的这个元件的描述性名称
    Apply toMain sample only:仅适用于主样本,默认用这个就可以了
    Field to check要检查的响应字段,即在取样器响应内容的哪个区域进行匹配
    Name of created variable引用名称,即匹配到的变量存储的名称,一般会有[refname]_g(匹配数量)、[refname]_g0 (整体)、[refname]_gn(某个具体匹配值)等多个变量,
    Regular Expression正则表达式,用于分析响应数据的正则表达式,除非使用$0$组,否则必须至少包含一组括号
    Template模板,如果在正则表达式中有多结果,则可以是$2$$3$等等,表示解析到的第几个值给title,如:$1$表示解析到的第1个值
    Match No. (0 for Random)匹配数字,取第几,0代表随机取值,-1代表全部取值,1、2、3等表示多行返回值取第几个值。
    Default Value缺省值,如果表达式没有取得到值,就使用这个默认值
    Use empty default value勾选此项后,如果未提取到值,则给变量赋予空字符串,而不是null

    3.2 使用示例

    先看这么一个场景,假如响应内容ccBBmmAABBAAddBBAA,想在该响应内容中提取AAddBB并存储到参数test中,该如何处理?

    首先,观察待匹配字符串的左右边界分别是BBAA,那么正则表达式应写成BB(.+?)AA,在【正则表达式测试器】中测试一下:
    在这里插入图片描述
    可以看到,第1列(列从0开始计数)第二行是我们想要的结果,因此【正则表达式提取器】中按下图填写:
    在这里插入图片描述
    接下来,我们使用【BeanShell Sampler】模拟服务,来测试一下:
    在这里插入图片描述
    在这里插入图片描述
    HTTP请求IP中引用正则表达式提取器提取到的test
    在这里插入图片描述
    在这里插入图片描述

    4 JSON提取器

    在【后置处理器】中,有一个【JSON提取器】,与【正则表达式提取器】有类似的作用,不同的是,前者专为处理JSON型的响应结果而生。
    在这里插入图片描述

    4.1 参数详解

    名称描述必须
    Name名称,脚本中显示的这个元件的描述性名称
    Names of chreated variables匹配到的数据存储的变量名称,后续可以使用${variable name}引用它
    JSON Path ExpressionsJSON路径表达式
    Default Values默认值,如果JSON 路径表达式未能匹配到值,将使用该默认值
    Match No. (0 for Random)如果匹配到多个结果,选择使用哪个。0代表随机,-1代表全部,x代表第x个
    Compute concatenation var勾选此项后,如果匹配到多个结果,JMeter会使用","将他们连接起来,存储在的变量中

    4.2 使用示例

    接下来,我们看一个示例:

    假如接口返回下面的JSON数据,我们想在其中提取“周芷若”到“name”参数中。

    {
    	"status":200,
    	"data":[{"id":101,"name":"张无忌"},{"id":102,"name":"周芷若"}]
    }
    

    首先,构造脚本结果如下图,【BeanShell Sampler】作为mock server返回上面的数据:
    在这里插入图片描述

    return "{\"status\":200,\"data\":[{\"id\":101,\"name\":\"张无忌\"},{\"id\":102,\"name\":\"周芷若\"}]}";
    

    在【BeanShell Sampler】下面添加【后置处理器】–【JSON Extractor】
    在这里插入图片描述
    这里解释一下【JSON Path expression】的写法,

    • . 首先$.这部分是固定写法
    • data表示在JSON串以"data"为key获取value,也就是"[{\"id\":101,\"name\":\"张无忌\"},{\"id\":102,\"name\":\"周芷若\"}]"。
    • data所对应的值是一个JSONArray(JSON数组)格式,里面有两个JSONObject(JSON对象),第二个JSONObject是我们需要的,因此再按索引值"1"去获取,写作data[1],写到这里,我们得到了{\"id\":102,\"name\":\"周芷若\"}这个JSONObject,接下来再根据name这个key去获取相应的值,就得到"周芷若"了。

    运行脚本,查看结果树中的【Debug Sampler】的响应数据:
    在这里插入图片描述

    后来在自己开发接口自动化框架的过程中,借鉴JMeter的这个功能,做了一个工具类,在响应结果是JSON串的接口中提取数据十分方便。

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * @author guozhengMu
     * @version 1.0
     * @date 2018/12/20 13:07
     * @description 根据自定义的字符串解析提取json中的特定内容
     * @modify
     */
    public class JsonPathExpression {
        public static void main(String[] args) {
            String str = "{\"data\" : {\"deth\" : {\"bids\" : [[\"3.637\", \"360000\"]],\"asks\" : [[\"4.273\", \"662\"],[[{\"a\":[1,2]}]]]}}}";
    //      String result = jsonPathExpression("{\"status\" : 200,\"employees\" : [{\"firstName\" : \"Bill\",\"lastName\" : \"Gates\"}, {\"firstName\" : \"George\",\"lastName\" : \"Bush\"}]}", "$.employees[1].firstName");
            String result = jsonPathExpression(str, "$.data.deth.asks[1].[0].[0].a[1]");
            System.out.println(result);
        }
    
        /**
         * 根据路径表达式解析JSON
         *
         * @param jsonString 待处理的字符串
         * @param matcher    路径表达式
         * @return
         */
        public static String jsonPathExpression(String jsonString, String matcher) {
            String[] jsons = matcher.split("\\.");
    
            JSONObject object = JSON.parseObject(jsonString);
            JSONArray array = new JSONArray();
            String result = "";
            int index;
    
            for (int i = 1; i < jsons.length; i++) {
                if (jsons[i].contains("[")) {
                    // 解析数字
                    index = getIndex(jsons[i]);
                    if (i == jsons.length - 1) { // 最后一层
                        // 特殊情况处理
                        if (jsons[i].length() <= 3) {
                            // []必然是从array中取值
                            result = array.getString(index);
                        } else {
                            array = object.getJSONArray(jsons[i].split("\\[")[0]);
                            result = array.getString(index);
                        }
                    } else { // 不是最后一层
                        if (jsons[i].length() <= 3) {
                            try {
                                array = array.getJSONArray(index);
                            } catch (Exception e) {
                                object = array.getJSONObject(index);
                            }
                        } else {
                            // 不知道下一层是array还是object
                            try {
                                array = object.getJSONArray(jsons[i].split("\\[")[0]).getJSONArray(index);
                            } catch (Exception e) {
                                object = object.getJSONArray(jsons[i].split("\\[")[0]).getJSONObject(index);
                            }
                        }
                    }
                } else {
                    if (i != jsons.length - 1) {
                        object = object.getJSONObject(jsons[i]);
                    } else {
                        result = object.getString(jsons[i]);
                    }
                }
            }
            return result;
        }
    
        /**
         * 将字符串中的数字解析出来
         *
         * @param string:待处理的字符串
         * @return
         */
        public static int getIndex(String string) {
            try {
                String regEx = "[^0-9]";
                Pattern pattern = Pattern.compile(regEx);
                Matcher matcher = pattern.matcher(string);
                String index = matcher.replaceAll("").trim();
                return Integer.valueOf(index);
            } catch (Exception e) {
                return 0;
            }
        }
    }
    

    5 疑难杂症

    这一节主要记录一些比较特殊的场景和其解决方案。

    5.1 提取多个值

    • 响应结果:
    {
    	"result" : {
    		"similar" : [{
    				"id" : "us-B072HFDHKY",
    				"asin" : "B072HFDHKY"
    			}, {
    				"id" : "us-B073WM827B",
    				"asin" : "B073WM827B"
    			}, {
    				"id" : "us-B07GY17KFZ",
    				"asin" : "B07GY17KFZ"
    			}, {
    				"id" : "us-B076NYPS7M",
    				"asin" : "B076NYPS7M"
    			}, {
    				"id" : "us-B07NSBBX7L",
    				"asin" : "B07NSBBX7L"
    			}, {
    				"id" : "us-B077W9GHDV",
    				"asin" : "B077W9GHDV"
    			}
    		]
    	},
    	"code" : 0,
    	"message" : "操作成功!"
    }
    
    • 实现目标:在响应结果中前3个 asin 的值。

    以上场景,响应结果是JSON格式,在正常情况下,使用【后置处理器】中的【JSON Extractor】显然是很方便的(提取路径:$.result.similar[0].asin 即可获取第一个 asin 的值)。但由于要提取不止一个 asin 值,【JSON Extractor】就不太适用了,这时候要用到【正则表达式提取器】。

    1. 建立下面的脚本结构:
      在这里插入图片描述
      【BeanShell Sampler】的作用依然是模拟接口响应:
    return 
    "{\"result\":{\"similar\":[{\"id\":\"us-B072HFDHKY\",\"asin\":\"B072HFDHKY\"},{\"id\":\"us-B073WM827B\",\"asin\":\"B073WM827B\"},{\"id\":\"us-B07GY17KFZ\",\"asin\":\"B07GY17KFZ\"},{\"id\":\"us-B076NYPS7M\",\"asin\":\"B076NYPS7M\"},{\"id\":\"us-B07NSBBX7L\",\"asin\":\"B07NSBBX7L\"},{\"id\":\"us-B077W9GHDV\",\"asin\":\"B077W9GHDV\"}]},\"code\":0,\"message\":\"操作成功!\"}";
    
    1. 【正则表达式提取器】:
      在这里插入图片描述
      正则表达式:"asin":(.+?)"}

    2. 运行脚本,查看结果:
      在这里插入图片描述
      可见,所有 asin 值已经被提取并保存在内存中,后续的组件中可以任意引用。

    3. 引用值
      在这里插入图片描述
      在这里插入图片描述

    5.2 多个值合并

    如果响应内容是<name = Author value = Muguozheng>,我们同时提取到Author:MuguozhengAuthorMuguozheng作为下次请求参数,该如何做呢?

    首先,去【正则表达式试验器】中测试
    在这里插入图片描述
    根据匹配要求和正则表达式的测试结果,【正则表达式提取器】如下:
    在这里插入图片描述
    正则表达式:<name = (.+?) value = (.+?)>
    模板:$1$;$2$

    运行后查看结果树,后面的sampler(取样器)引用规则如下:

    1. 使用${test}可以引用Author:Muguozheng
    2. 使用${test_g}可以引用2这个数值
    3. 使用${test_g0}可以引用<name = Author value = Muguozheng>
    4. 使用${test_g1}可以引用Author
    5. 使用${test_g2}可以引用Muguozheng

    在这里插入图片描述

    5.3 左右边界不好确定

    假如响应结果是这么一个字符串:<name = Readers value = 马云,马化腾,刘强东>(向三位大佬致敬),想要提取马化腾这个值。

    这个例子的难点在于,正则表达式的左右边界无法确定,因为马化腾的右边界,刘强东也是响应内容中的动态值(这里的动态指的是,下次请求整体的响应内容可能变成"<name = Readers value = 张三,李四,王五>")。

    这里,正则表达式写成下面的样式即可:
    在这里插入图片描述
    于是,【Beanshell Sampler】写入模拟数据

    return "<name = Readers value = 马云,马化腾,刘强东>";
    

    【正则表达式提取器】可以如下图输入:
    在这里插入图片描述
    正则表达式:<name = Readers value = (.+?),(.+?),(.+?)>
    模板:$2$

    运行后查看结果树:
    在这里插入图片描述

    5.4 多个匹配结果

    在实际工作中,接口响应结果可能是一个集合,具有同样的左右边界,但我们需要的是最新的那条,一般是最后一条。

    如下,新建一个【Beanshell Sampler】模拟接口:

    return "<td>您的验证码是:400836,切勿将验证码告诉他人<td><td>您的验证码是:54297,切勿将验证码告诉他人<td><td>您的验证码是:65291,切勿将验证码告诉他人<td>";
    

    接下来在【Beanshell Sampler】下创建【正则表达式提取器】(匹配数字写-1,表示取所有匹配结果):
    在这里插入图片描述
    正则表达式:您的验证码是:(.+?),切勿将

    添加【Debug Sampler】和【查看结果树】后运行脚本,在【查看结果树】中可以看到,【正则表达式提取器】匹配结果:
    在这里插入图片描述

    code_1=400836
    code_1_g=1
    code_1_g0=您的验证码是:400836,切勿将
    code_1_g1=400836
    code_2=54297
    code_2_g=1
    code_2_g0=您的验证码是:54297,切勿将
    code_2_g1=54297
    code_3=65291
    code_3_g=1
    code_3_g0=您的验证码是:65291,切勿将
    code_3_g1=65291
    code_matchNr=3
    

    那么我们想获得匹配结果的最后一个,该怎么操作呢?这个问题的难点在于,事先无法确定匹配结果的数量,而解决这个难点的关键就在于code_matchNr这个参数,它的含义是匹配到的结果的数量,它的值就是最后一个匹配结果的索引。

    很明显,取code_${code_matchNr}就等值于code_3,无论匹配结果的数量是多少,code_${code_matchNr}都代表着最后一条结果。

    JMeter不支持嵌套引用,所以${code_${code_matchNr}}这种写法是不正确的。想正确引用该值,需要打开【Tools】-【函数助手对话框】,选择_V,填入code_${code_matchNr},点击生成:
    在这里插入图片描述
    ${__V(code_${code_matchNr})} 这个表达式就表示引用了匹配结果的最后一个。

    5.5 其他特殊用法

    在身份证中匹配提取出生日期,正则表达式如下图:
    在这里插入图片描述

    以上就是如何使用正则表达式提取器和JSON提取器实现关联的全部内容,觉得不错的朋友请点个赞和收藏,有不准确之处,欢迎指正。

    展开全文
  • 在开发中我们常用到对josn对象进行解析,json转换成java对象和java对象转换成json。 对于这些操作相互转换,我们进行学习和说明: 对于以上实现需要用到jar包进行下载(整理了一份,可以根据链接到百度云盘进行下载...

    在开发中我们常用到对josn对象进行解析,json转换成java对象和java对象转换成json。
    对于这些操作相互转换,我们进行学习和说明:
    对于以上实现需要用到jar包进行下载(整理了一份,可以根据链接到百度云盘进行下载,永久有效):
    链接:https://pan.baidu.com/s/1pICGN-kS5nNhlYXmOG1dIQ 提取码:hrbr

    创建实体类Person:
    package com.test07.json;

    public class Person {

    private String name;  
    private int num;  
    private String sex;  
    private int age;
    
    public Person() {  
        // TODO Auto-generated constructor stub  
    }  
    
    public Person(String name, int num, String sex, int age) {  
        super();  
        this.name = name;  
        this.num = num;  
        this.sex = sex;  
        this.age = age;  
    }  
    
    public String getName() {
    	return name;
    }
    public void setName(String name) {
    	this.name = name;
    }
    public int getNum() {
    	return num;
    }
    public void setNum(int num) {
    	this.num = num;
    }
    public String getSex() {
    	return sex;
    }
    public void setSex(String sex) {
    	this.sex = sex;
    }
    public int getAge() {
    	return age;
    }
    public void setAge(int age) {
    	this.age = age;
    } 
    

    }

    1.josn对象进行解析
    package com.test07.json;

    import net.sf.json.JSONObject;

    public class ParseJson {

    private String jsonStr;  
    public ParseJson() { }  
      
    public ParseJson(String str){  
        this.jsonStr = str;  
    }  
    /** 
     * 解析json字符串 
     */  
    public void parse(){  
        JSONObject jsonObject = JSONObject.fromObject(jsonStr);  
        String name = jsonObject.getString("name");  
        int num = jsonObject.getInt("num");  
        String sex = jsonObject.getString("sex");  
        int age = jsonObject.getInt("age");  
          
        System.out.println(name + " " + num + " " + sex + " " + age);  
    } 
    
    /*//将json字符串转换为java对象  
    @SuppressWarnings("static-access")
    public Person JSON2Object(){  
        //接收{}对象,此处接收数组对象会有异常  
        if(jsonStr.indexOf("[") != -1){  
            jsonStr = jsonStr.replace("[", "");  
        }  
        if(jsonStr.indexOf("]") != -1){  
            jsonStr = jsonStr.replace("]", "");  
        }  
        JSONObject obj = new JSONObject().fromObject(jsonStr);//将json字符串转换为json对象  
        Person jb = (Person)JSONObject.toBean(obj,Person.class);//将建json对象转换为Person对象  
        return jb;//返回一个Person对象  
    } */
    

    }

    2.json转换成java对象
    //将json字符串转换为java对象
    @SuppressWarnings(“static-access”)
    public Person JSON2Object(){

        //接收{}对象,此处接收数组对象会有异常  
        if(jsonStr.indexOf("[") != -1){  
            jsonStr = jsonStr.replace("[", "");  
        }  
        if(jsonStr.indexOf("]") != -1){  
            jsonStr = jsonStr.replace("]", "");  
        }  
        JSONObject obj = new JSONObject().fromObject(jsonStr);//将json字符串转换为json对象  
        Person jb = (Person)JSONObject.toBean(obj,Person.class);//将建json对象转换为Person对象  
        return jb;//返回一个Person对象  
    }  
    

    3.java对象转换成json
    package com.test07.json;

    import net.sf.json.JSONObject;
    /**

    • 将java对象转换为json字符串

    • @author Administrator
      */
      public class ConsJson {

      public ConsJson() {
      // TODO Auto-generated constructor stub
      }

      public String Object2Json(Object obj){
      JSONObject json = JSONObject.fromObject(obj);//将java对象转换为json对象
      String str = json.toString();//将json对象转换为字符串
      return str;
      }
      }

    测试类:
    package com.test07.json;
    public class Test {
    public static void main(String[] args) {
    //将字符串转换为json对象,然后根据键得到相应的值
    ParseJson pj = new ParseJson("{“name”:“gu”,“num”:123456,“sex”:“male”,“age”:24}");
    pj.parse();

            //将一个json字符串转换为java对象  
            Person p = pj.JSON2Object();  
            System.out.println("Name:" + p.getName());  
            System.out.println("Num:" + p.getNum());  
            System.out.println("Sex:" + p.getSex());  
            System.out.println("age:" + p.getAge());        
              
            //将一个java对象转换为Json字符串  
            Person p1 = new Person("gu1",123,"male",23);  
            ConsJson cj = new ConsJson();  
            String str1 = cj.Object2Json(p1);  
            System.out.println(str1);    
        }  
    

    }

    4.利用在线工具:
    在线JSON字符串转Java实体类
    http://www.bejson.com/json2javapojo/new/
    在这里插入图片描述

    展开全文
  • JSON提取器的运用

    2020-07-27 18:20:19
    如果返回的数据是JSON格式的,我们可以用JSON提取器来提取需要的字段。 json提取器通过写 符号 描述 $ 查询的根节点对象,用于表示一个json数据,可以是数组或对象 @ 过滤器断言(filter predicate)处理的当前节点...
  • JsonPath:使用类似XPATH的语法从JSON提取数据
  • 希望大佬们能给些代码的具体实例,我现在需要从一个JSON网页上爬取数据,但是一直无法读取那个网页。感谢!
  • 性能测试_Day_09(BeanShell)JMETER JSON提取器 JSON ExtractorJMETER BeanShell前置处理器:BeanShell PreProcessor后置处理器:BeanShell PostProcesser断言:BeanShell Assertion JMETER JSON提取器 JSON ...
  • 下面小编就为大家分享一篇java提取json中某个数组的所有值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Java提取json中的数据

    2019-11-10 11:45:33
    1、需要导入的依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version>...2、待提取的数据格式 ...
  • 例:String { “name”: “名字”, “sex”: “性别”, “family”: "{ “name”: “名字”, “sex”: “性别”, “family: null }” } ...如何获取 family的数据呢?...// 转换成JSON JSONObject jsonObject = J.
  • 在登录后使用后置处理器提取json提取器可以提取token值 json提取器 变量名获得token值 我们使用参数传递 使用了MD5加密 补充: 提取多个值注意每个值之间用;隔开并且Defvalue一定要...
  • Java 提取json中的文本

    千次阅读 2018-11-24 15:36:10
    Java 提取json中的文本 1. json 文本 {&quot;result&quot;: { &quot;code&quot;:1, &quot;msg&quot;:&quot;success&quot;, &quot;url&quot;:&quot;&...
  • Elasticsearch xml-to-json提取处理器 以TLDR方式说明此处理器的用例。 用法 PUT _ingest/pipeline/xml-to-json-pipeline { "description": "A pipeline to do whatever", "processors": [ { "xml_to_json" : {...
  • 把嵌套Json转换成Java对象

    千次阅读 2017-07-13 23:01:58
    问题描述我希望能够从Java动作方法中的JSON字符串访问属性。该字符串可以通过简单的说myJsonString = object.getJson()。以下是字符串可以是什么样的示例:
  • 文章目录SpringMVC Json对象与java对象互转接收Json字符串,自动转化为java对象返回java对象,自动转化为Json字符串fastjson方式实现 SpringMVC Json对象与java对象互转 ​ SpringMVC原生方式依赖的是jackson/gson,...
  • 目录json的数据提取1 什么是json2 json模块中方法的学习3 jsonpath模块的学习3.1 jsonpath介绍3.2 JsonPath 对于 JSON 来说,相当于 XPath 对于 XML。3.3 JsonPath与XPath语法对比:3.4 语法使用示例3.5 代码示例: ...
  • JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接1.问题背景2.使用JSON提取器提取JSONArray中的多个值3.使用BeanShell进行字符串拼接 1.问题背景 在使用JMeter做接口测试的过程中,我...
  • java组装json提取一个json的例子

    万次阅读 2013-12-05 21:42:18
    package jsonparsed;...import net.sf.json.JSONException; import net.sf.json.JSONObject; import net.sf.json.JSONArray; public class jsonparsed { // 创建JSONObject对象 private static JSONObject create
  • java中读取JSON中的数据 使用第三方工具实现直接转换 (第三方工具jar包集中地 :点击打开链接) 将对象转换为json数据格式 Person p = new Person(); JSONObject json = JSONObject.fromObjec
  • java提取json字符串中的值

    千次阅读 2019-01-07 15:11:38
    Java开发当中经常需要Json格式的数据,比如从{"account_name":"zhangsan2018","account_openid":"fa3c859554048750cc258f48870b858f","addr_right":1,"addr...
  • S1.Json2Java根据 JSon 数据自动生成对应的 Java 实体类,还支持 Parcel、Gson Annotations 对应代码自动生成。期待后续的提取父类以及多 url 构建整个工程的功能项目地址:...
  • Jmeter之JSON数据提取

    千次阅读 2019-11-04 15:19:22
    JSON提取器 如有多个参数时参数名、表达式、匹配编号以及默认值均以“;”号隔开。以上均与参数名应一一对应 Json提取器语法说明  完整的语法说明请见https://github.com/json-path/JsonPath jmeter中...
  • jmeter json 提取器 同时提取两个参数

    千次阅读 2019-12-13 15:28:23
    "2546", }, { "orderType": "0", "orderformId": "2430", } ] } json提取器参数: json path expressions:$.list[1].orderformId;$.list[1].orderType ,这样只能指定固定的一个对象;而$.list[*].orderformId;$....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,364
精华内容 15,345
关键字:

json提取信息java

java 订阅