【问题标题】:JMeter: How to use Regular Expression to extract the value of a duplicate field?JMeter:如何使用正则表达式提取重复字段的值?
【发布时间】:2013-09-01 05:24:27
【问题描述】:

我有以下响应正文 JSON:

{
    "address": [
    {
        "id": "1234"
    }
    ],
    "id": "d1a4f010-48d9-434b-9b3a-2d2b12f5e38c"
}

我正在尝试提取 second "id" 字段的值,即

"id": "d1a4f010-48d9-434b-9b3a-2d2b12f5e38c"

我在 JMeter 中使用这个正则表达式: 正则表达式:"id":"(.+?)"

当我运行测试时,它返回“1234”而不是 guid。如何更改我的正则表达式以使其返回 guid?

【问题讨论】:

标签: regex json jmeter


【解决方案1】:

使用JMeter,可以使用Regular Expression Extractor ...

Reference Name: myid
Regular Expression: "id": "(.+?)"
Template: $1$
Match No.: 2

如果您指定使用Match No:...

0 = Random Match
1 = First Match 
2 = Second Match
etc....

或者使用对应的变量来访问匹配。 ${myid_2}

变量设置如下:

myid_matchNr - Number of matches found, possibly 0
myid_n       - (n = 1, 2, etc..) Generated by the template
myid_n_gm    - (m = 0, 1, 2) Groups for the match (n) 
myid         - By itself it is always set to the default value
myid_gn      - Not set at all

或者根据这种情况判断,如果您只喜欢正则表达式并且您的字符串完全按照说明进行。你可以这样做..

],\s+"id": "(.+?)"

【讨论】:

    【解决方案2】:

    您可以使用惰性正则表达式直接查找 guid,而不是查找“id”

    类似这样的:([0-9a-z-]{36}).*?

    如果您不确定如何创建正则表达式,只需使用在线正则表达式生成器即可。

    【讨论】:

      【解决方案3】:

      我不知道 jmeter 但要获取这个表达式的第二个 id 的值

       "id"\s*:.+?"id"\s*:\s*"([^"]*)" 
      

      它会在某些语言中返回你想要的 $1 变量。我想在 jmeter 中你可以有类似的东西来获得第一组。

      根据this page 可能是 ${MYREF_g1}?

      【讨论】:

        【解决方案4】:

        给定的响应值

        {
            "address": [
            {
                "id": "1234"
            }
            ],
            "id": "d1a4f010-48d9-434b-9b3a-2d2b12f5e38c"
        }
        

        提取第二个id值的正则表达式

        正则表达式格式

        ],\s\s\s\s\s"id": "(.+)"
        

        注意

        The above regex extract the following id values
        d1a4f010-48d9-434b-9b3a-2d2b12f5e38c
        

        【讨论】:

          【解决方案5】:

          我试过这个:

          "id":\s*"([0-9a-f\-]*)"
          

          【讨论】:

            【解决方案6】:

            试试下面的表达式

            "id": "([0-9a-z-])*+"
            

            【讨论】:

              【解决方案7】:

              第 1 步:

              id:"1234";

              id:(.+?)

              “1234”

              但我们只需要值。所以试试这个,

              第 2 步:

              id:"1234";

              id:('(.+?)')

              1234

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-05-28
                • 1970-01-01
                • 1970-01-01
                • 2017-01-21
                相关资源
                最近更新 更多