需要正则表达式才能从JSON中查找特定数量的特定属性

时间:2018-03-08 08:59:51

标签: java json regex jmeter

在jmeter中,我有这个正则表达式提取器从响应JSON中提取customerId,以便在下一个请求中使用该customerId。 我跟随json:

{
       "customerList":{
          "Customer":{
             "customerName":"Test1",
             "id":"0215236",
             "customerContactNo":"655659856"
          },
          "Customer":{
             "customerName":"Test2",
             "id":"99925236",
             "customerContactNo":"7458622"
          },
          "Customer":{
             "customerName":"Test3",
             "id":"1521865",
             "customerContactNo":"7984443613"
          }
       },
       "productList":{
          "product":{
             "productName":"TestProduct1",
             "id":"0215236"
          },
          "product":{
             "productName":"TestProduct2",
             "id":"452698"
          },
          "product":{
             "productName":"TestProduct3",
             "id":"14567892"
          }
       }
    }

我想使用正则表达式提取每个客户的customerId。 我正在尝试关注正则表达式:

\"customer\":\{.+\"customerId\":\"([0-9]+)\"

3 个答案:

答案 0 :(得分:0)

regex中使用JSON进行字段提取不是最好的主意。您应该考虑为您的语言使用native / build-in JSON解析器。由于您尚未提及您正在使用的语言,因此您可以在此链接中查看language的工具列表(位于页面底部)。另外,正如@Andy G所提到的,这不是有效的格式。

答案 1 :(得分:0)

为什么不去寻找"customerId":"(\d+)"正则表达式:

JMeter Regular Expression

参考文献:

请注意,大多数JSON实现都不允许重复对象,因此在同一级别的多个Customer对象方面,它可能是应用程序中的错误。根据{{​​3}}

  

对象是零个或多个名称/值的无序集合      对,其中名称是字符串,值是字符串,数字,      boolean,null,object或array。

其中unordered表示密钥名称是唯一的。我建议您与应用程序开发人员提出这一点,如果它被视为错误并将被修复,您将能够使用JSON speficication而不是正则表达式

答案 2 :(得分:0)

此JSON无效,请在https://jsonchecker.com/中查看,您将获得:

  • 第8行重复密钥'客户'

https://jsonformatter.curiousconcept.com/处相同:

  • 警告:重复的密钥,名称应该是唯一的。[代码23,结构21]
  • 警告:重复的密钥,名称应该是唯一的。[代码23,结构37]
  • 警告:重复的密钥,名称应该是唯一的。[代码23,结构69]
  • 警告:重复的密钥,名称应该是唯一的。[代码23,结构81]

所以在尝试这样的提取之前修复JSON。