2016-06-10 48 views
1

我需要从JSON响应特定的“WarehouseService”型机关中提取的"id":值:JMeter的正则表达式 - 提取JSON效应初探码的精确值

{"id":21,"active":true,"activities":[{"id":229,"activityId":61,"activityName":"Restack","customFieldIds":[8,10],"separateInvoice":false,"unitId":42,"unitName":"Pallet","locationActivityId":0,"incentiveGroupId":null},{"id":228,"activityId":101,"activityName":"Double Roll Off","customFieldIds":[8,9],"separateInvoice":true,"unitId":45,"unitName":"Put","locationActivityId":0,"incentiveGroupId":null},{"id":227,"activityId":129,"activityName":"Container","customFieldIds":[8,5,9],"separateInvoice":false,"unitId":64,"unitName":"Item","locationActivityId":0,"incentiveGroupId":null},{"id":226,"activityId":298,"activityName":"Truck Wash","customFieldIds":[7,6],"separateInvoice":false,"unitId":44,"unitName":"Bottle","locationActivityId":0,"incentiveGroupId":null},{"id":225,"activityId":299,"activityName":"Fueling","customFieldIds":[4,8],"separateInvoice":false,"unitId":190,"unitName":"Percentage","locationActivityId":0,"incentiveGroupId":null}],"comCheckServiceCharge":30.00,"creditCardServiceCharge":1.00,"locationId":15,"name":"SCORS","nameId":53,"selectionRates":[],"serviceRates":[],"type":"WarehouseServices","unloadingRates":[]}, 

我在寻找的值等于“21”在这个字符串中。 问题是响应代码中有很多其他部分包含相同的参数字符串,但部门类型不同。 你们可以帮我写出正确的正则表达式,这样我就可以匹配最终得到“WarehouseService”的确切字符串吗? 我试过使用lookarounds,但它没有帮助。

+1

你通常不会使用[tag:regex]来解析JSON。它可能适用于您的示例,但如果JSON获得美化,会发生什么情况? – andlrc

+0

另外,在序列化的JSON对象中,定义属性的顺序可能会改变。例如,你可能会收到'{“prop1”:“val1”,“prop2”:“val2”}'以及'{“prop2”:“val2”,“prop1”:“val1”}'代表同一个对象。我绝对不会使用正则表达式从JSON中提取数据。 – user2340612

回答

2

我不会推荐使用正则表达式来解析JSON。最近发布的JMeter 3.0附带JSON Path PostProcessor,它是专为使用JSON数据而设计的。相关配置是:

  • 变量名:id
  • JSON路径表达式:$..[?(@.type == 'WarehouseServices')].id
  • 等领域可能会留下,因为他们是

可以使用的JSON路径测试模式View Results Tree侦听器无需重新执行测试即可测试您的JSON路径查询与真实响应。

JSON Path Tester

参考文献: