jmeter--正则提取json串中一个大括号对象里指定字段值的的另一个字段的值

需要提取如图红框_id的值,整个返回里有多个类似的大括号对象:

里面的第一个id的值,但是整个json串不止这么一个,并且只能匹配quality_level是349的这个大括号里的第一个id的值。下面使用3种方法:

第一种:最笨的方法,所有字段都写出来做匹配

{"_id":"(.{10,30}?)","agent":{"_id":"[^"]*?","name":"[^"]*?"},"category":{"_id":"[^"]*?","name":"[^"]*?"},"create_time":[^"]*?,"duration":[^"]*?,"end_time":[^"]*?,"is_resolved":[^"]*?,"is_inspected":[^"]*?,"inspector":"[^"]*?","inspect_time":[^"]*?,"location":"[^"]*?","quality_level":349

这个正则是把整个从第一个id到quality之间的所有字段都写出来,每个字段都匹配了。因为每个字段的值里肯定不会带有双引号,所以用了排除双引号的表达式[^"]。这样就可以保证每个字段只会匹配到他原本的值,不会过多的匹配其他内容。这是最笨的办法

第二种:在第一种的基础上最变更

\{"_id":"(\w{24})","agent":\{[^{}]+?\},"category":\{[^{}]+?\}[^{}]+?"quality_level":349,

这个正则用了过滤大括号的表达式[^{}],因为我们看到那么多json串都是用大括号分割的,那我只要让我表达式里面不匹配大括号,即匹配的内容里不能有大括号就能把整个范围定位到了一个大括号里,但是呢,由于agent跟category下又都有大括号,所以我只能把他们2个大括号先做匹配出来,再在他们2个括号里面去匹配不带大括号的内容。

第三种:使用不包含某些指定的单词语法

{"_id":"(.{10,30}?)","agent"(?:(?!agent).)*,"quality_level":349

这个正则用了不包含某个单次的匹配语法(?!agent). 这个表达式就是去匹配每个字符串之前是否包含了agent,包含就为false,只有不字符前都没有agent才为true,这样我就可以对着这个表达式加上星号(*),让他去匹配每个,"agent"后面的内容,只有不含agent的内容才能匹配到,这样就可以保证了我id到quality里面只会有一个agent。就实现了只匹配一个大括号的内容了

当然类似这种json串的返回值要提取,可以直接使用json解析,会更加的方便

时间: 2024-10-08 23:11:18

jmeter--正则提取json串中一个大括号对象里指定字段值的的另一个字段的值的相关文章

JMeter用BeanShell获取复杂的JSON串中的某个参数的值

大家好,这篇博文中主要是介绍怎么用JMeter的BeanShell去获取复杂的JSON串中的某个参数的值,这将 便于我们用JMeter做出更完美的自动化测试: 首先有这样一个json串,如下图所示: 如上图中,画红框的部分,参数xsddbh(111807200000645300)的值可知,在下一个接口请求中,需要用到上图中的参数 cpbh(1532048096286)的值,然而参数xsddbh在json串中的每个list都有,那么这时候怎么办呢?在这里我将用alibaba.fastjson 这个

Jmeter正则提取请求响应数据

前言 在测试时,我们经常需处理请求返回的响应数据,比如很多时候 cookie 或 token 或 Authorization授权码 会返回在 Response headers(响应头)中,这时我们便需要从中进行提取,以供其他接口使用. 今天我们主要学习下,如何在Jmeter中通过正则提取响应数据中 Response headers 的数据. 总的设置界面如下: 发送请求,获取响应数据 首先,设置一个HTTP请求,如下: 接着,设置一个察看结果树,然后执行,得到响应数据,下图中的cookie即我们

比较任意两个JSON串是否相等(比较对象是否相等)JAVA版

废话少说,直接入题. 在面向对象语言中,经常会比较两个对象是否相等,而比较的大多是实体类实例,也就是封装数据的那些类实例,或者是Map.List互相嵌套成的复杂数据结构. 比较对象是否相等,常见的思路是重写equals方法,但鉴于对象的种类多变,嵌套层次复杂,仅仅靠重写equals是很难实现的. 小菜的思路是可以把对象序列化,由于这些对象均是用来表达数据结构,因此可以直接转换成JSON字符串,用字符串来描述数据结构,避免实现Serializable接口.将对象序列化成字符串后,比较是否相等就相对

Jmeter正则提取_实现前后衔接请求

正则提取是Jmeter常用的方法之一,下面就正则提取进行简单介绍. 如图所示,我这里有2个请求,下面我们是实现下第一个请求返回的"pushId"返回结果作为第二个请求的请求字段之一. 首先我们新建一个正则提取器到第一个请求中. 然后解释下正则提取各个配置的含义: 引用名称:整个正则的名称,主要作用是方便后面引用. 正则表达式:括号中表示的是要提取的部分,其中  .*? 是非贪婪匹配 模板:如果有多个正则匹配.即就是多个(.*?)时,取具体哪一个,$1$表示取第一个匹配 匹配数字:正则提

iOS开发解决json串中的NSNull类型

后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放在NSDictionary类别中 #pragma mark - 私有方法 //将NSDictionary中的Null类型的项目转化成@"" +(NSDictionary *)nullDic:(NSDictionary *)myDic { NSArray *keyArr = [myDic a

iOS解决json串中的NSNull类型

后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符串.下面是转化方法: 1 自定义的几个方法:放在NSDictionary类别中 #pragma mark - 私有方法 //将NSDictionary中的Null类型的项目转化成@"" +(NSDictionary *)nullDic:(NSDictionary *)myDic { NSArray *keyArr = [myDic a

jmeter在返回的json串中提取需要的值

接口测试时我们需要对某条信息进行修改,如我们先创建了一篇文章,然后进行修改操作 我们就需要找到该文章的唯一标志,如id 示例:我们要将下图返回的json 中id进行提取 注:可输入$.加需要的key即可查找对应的值($.代表根节点) 注:一般这种创建文章等登录后操作是需要先进行鉴权的 进行提取以下为提取步骤: 使用后置处理器中的JSON Extractor(json提取器) 添加: 配置JSON Extractor(json提取器): 添加一个Debug Sampler(调试取样器ctrl +

JObject提取Json字符串中某字段的值

JObject 1.Json字符串如下: {title:123,body:456,list:{title:'这是一个标题',body:'what'}} 2.代码如下: static void Main(string[] args) { string str = "{title:123,body:456,list:{title:'这是一个标题',body:'what'}}"; JObject o = JObject.Parse(str); Console.WriteLine(o[&quo

Java 正则提取数字串

例如:有一个字符串:"数量最低2000份",将其中的2000数字提取出来. String arg0 = "数量最低2000份"; Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher(arg0); String result = ""; if(m.find()){ result = m.group(0); } System.out.println(result);