zoukankan      html  css  js  c++  java
  • 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解析,会更加的方便
  • 相关阅读:
    [Unity3D]调用Android接口
    android studio build.gradle中 project.ANDROID_BUILD_SDK_VERSION
    java中static{}语句块详解
    [Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法
    c++中 extern
    android studio一直卡在Gradle:Executing tasks
    Android Studio导入第三方类库的方法
    Android按返回键退出程序但不销毁,程序后台运行,同QQ退出处理方式
    Ubuntu64位下使用eclipse闪退的解决
    Android4.1中BinderService的作用
  • 原文地址:https://www.cnblogs.com/VashGu927/p/8043456.html
Copyright © 2011-2022 走看看