2016-08-12 62 views
3

長い配列の応答で指定されたhousenumberに対してaddressIdを抽出します。アレイ応答は、この(スニペット)のようになります。私は、ほんの一例として、この応答に2 housenumbersを示すが、元の応答が大きいJMeter:配列応答から正規表現を抽出する

: : "footprint":null, 
: : "type":null, 
: : "addressId":"0011442239", 
: : "streetName":"solitudestr.", 
: : "streetNrFirstSuffix":null, 
: : "streetNrFirst":null, 
: : "streetNrLastSuffix":null, 
: : "streetNrLast":null, 
: : "houseNumber":"25", 
: : "houseName":null, 
: : "city":"stuttgart", 
: : "postcode":"70499", 
: : "stateOrProvince":null, 
: : "countryName":null, 
: : "poBoxNr":null, 
: : "poBoxType":null, 
: : "attention":null, 
: : "geographicAreas": 
: : [ 
: : ], 
: : "firstName":null, 
: : "lastName":null, 
: : "title":null, 
: : "region":"BW", 
: : "additionalInfo":null, 
: : "properties": 
: : [ 
: : ], 
: : "extAddressId":null, 
: : "entrance":null, 
: : "district":null, 
: : "addressLine1":null, 
: : "addressLine2":null, 
: : "addressLine3":null, 
: : "addressLine4":null, 
: : "companyName":null, 
: : "contactName":null, 
: : "houseNrExt":null, 
: : "derbyStack":false 
: }, 
: { 
: : "footprint":null, 
: : "type":null, 
: : "addressId":"0011442246", 
: : "streetName":"solitudestr.", 
: : "streetNrFirstSuffix":null, 
: : "streetNrFirst":null, 
: : "streetNrLastSuffix":null, 
: : "streetNrLast":null, 
: : "houseNumber":"26", 
: : "houseName":null, 
: : "city":"stuttgart", 
: : "postcode":"70499", 
: : "stateOrProvince":null, 
: : "countryName":null, 
: : "poBoxNr":null, 
: : "poBoxType":null, 
: : "attention":null, 
: : "geographicAreas": 
: : [ 
: : ], 
: : "firstName":null, 
: : "lastName":null, 
: : "title":null, 
: : "region":"BW", 
: : "additionalInfo":null, 
: : "properties": 
: : [ 
: : ], 
: : "extAddressId":null, 
: : "entrance":null, 
: : "district":null, 
: : "addressLine1":null, 
: : "addressLine2":null, 
: : "addressLine3":null, 
: : "addressLine4":null, 
: : "companyName":null, 
: : "contactName":null, 
: : "houseNrExt":null, 
: : "derbyStack":false 
: }, 

Q:adressIdを特定のhouseNumberに一致させるにはどうすればよいですか(私のCSVデータセットにはこれらのhou​​seNumbersがあります)?私はすべてのアドレスIDを抽出する正規表現を行うことができましたが、私は正しい一致番号を使用する必要があります。 Jmeterでしかし私は、スクリプトをテストするさまざまな環境でこれらの整備が同じままであるとは想定できません。

+1

このように[住所 ":"(\ d +) "(?=(?!\ n:+ \ [)[\ s \ S])* houseNumber": "26 | $ ) '](https://regex101.com/r/kL9xQ8/1)? –

+0

ありがとうございました! – DMC

+1

JMeterでも動作しましたか?先読みが冗長であると私にはちょうど起こった。 –

答えて

3

正規表現を使用してJSONデータを再考することをお勧めします。

JMeter 3.0からは、JSON Path PostProcessorがあります。

`$..[?(@.houseNumber == '25')].addressId` 

デモ:あなたが代わりにハードのJMeterの変数を使用することができます

JSON Path Demo

あなたは、任意のJSONPathクエリを実行することができ、それを使用すると、その与えられたhouseNumberためaddressIDを抽出するのと同じくらい簡単になります-coded 25値のような:

$..[?(@.houseNumber == '${houseNumber}')].addressId 

もしあなたはまだJMeter Plugins

経由JSON Path Extractorを使用してJSONパス後処理機能を持つことができるのJMeter < 3.0を使用する詳細については、特定の条件を選択章のAdvanced Usage of the JSON Path Extractor in JMeterの記事を参照してくださいする必要が何らかの理由で。

+0

[あなたの答えの1つ](http://stackoverflow.com/search?q=user%3A2897748+%5Bjmeter%5D+JSON)が同じものの横にある場合、多分あなたは偽装として質問を閉じるべきですか? –

2

使用する場合は、addressId後、特定houseNumber前に数字をキャプチャします正規表現を使用することができ焼き繰り出さ貪欲トークン(より良い効率のための)正規表現エンジンは別のものに溢れないことを確認するために、それらの間に記録。キャプチャグループ1($1$テンプレート値) - 文字列リテラル

  • (\d+) -

    • "addressId":"

      "addressId":"(\d+)"(?:[^\n"]*(?:\n(?!: +: +\[)[^\n"]*|"(?!houseNumber")[^\n"]*)*"houseNumber":"25"|$) 
      

      regex demo

      詳細を(必要な家屋番号と25を置き換え)を参照してください。 1桁以上

    • " - 引用
    • (?:[^\n"]*(?:\n(?!: +: +\[)[^\n"]*|"(?!houseNumber")[^\n"]*)*"houseNumber":"25"|$) - 2つの代替、一方は$(文字列の末尾)または非捕捉基: - 改行以外のゼロ個以上の文字と"
    • (?:
      • [^\n"]* -
        • \n(?!: +: +\[)[^\n"]* - 改行の後に改行があり、改行以外の0 +文字が続く: : [が続きます。"
        • |
        • - 又は
        • "(?!houseNumber")[^\n"]*
        • - "houseNumberと続き、0改行以外+文字と"
      • )*と続かない - 0回以上
    • を繰り返すことができるより
    • "houseNumber":"25" - hourse数値リテラル文字列。