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

本文介绍三种从特定JSON数据中抽取_id值的方法,重点讲解如何精确匹配含有特定quality_level的记录。此外,还提供了使用正则表达式的不同策略,以及推荐采用JSON解析方式以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要提取如图红框_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解析,会更加的方便

转载于:https://www.cnblogs.com/VashGu927/p/8043456.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值