2016-06-10 49 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

參考文獻: