Regex JSON response инструмент стресса Гатлинга

Требуется захватить переменную с именем scanNumber в HTTP-ответе, заблокированном следующим образом:

{"resultCode":"SUCCESS","errorCode":null,"errorMessage":null,"profile":{"fullName":"TestFirstName TestMiddleName TestLastName","memberships":[{"name":"UA Gold Partner","number":"123-456-123-123","scanNumber":"123-456-123-123"}]}}

Как я могу это сделать с помощью регулярных экспериментов? Инструмент, который я использую, - это инструмент стресса Гатлинга (с Scala DSL).

Я пробовал сделать это так:

.check(jsonPath("""${scanNumber}""").saveAs("scanNr")))

Но получаю ошибку:

---- Errors --------------------------------------------------------------------
> Check extractor resolution crashed: No attribute named 'scanNu      5 (100,0%)
mber' is defined

person Magnus Jensen    schedule 15.09.2014    source источник


Ответы (3)


Вы были близки в первый раз.

На самом деле вам нужно:

.check(jsonPath("""$..scanNumber""").saveAs("scanNr")))

или возможно:

.check(jsonPath("""$.profile.memberships[0].scanNumber""").saveAs("scanNr")))

Обратите внимание, что здесь используется jsonPath, а не регулярные выражения. Для этого JsonPath должен быть более надежным, чем регулярное выражение.

Ознакомьтесь со спецификацией JsonPath для более расширенного использования.

person James_pic    schedule 13.11.2014

используйте это регулярное выражение, чтобы сопоставить это в любом месте json:

/"scanNumber":"[^"]+"/

и если вы хотите, чтобы совпадение происходило только в структуре, которую вы сказали, используйте:

/\{[^{[]+\{[^{[]+\[\{[^{[]*("scanNumber":"[^"]+")/
person Hossein    schedule 15.09.2014

Поскольку поля json могут изменять свой порядок, вам следует сделать свое регулярное выражение более терпимым к этим изменениям:

val j = """{"resultCode":"SUCCESS","errorCode":null,"errorMessage":null,"profile":{"fullName":"TestFirstName TestMiddleName TestLastName","memberships":[{"name":"UA Gold Partner","number":"123-456-123-123","scanNumber":"123-456-123-123"}]}}"""
val scanNumberRegx = """\{.*"memberships":\[\{.*"scanNumber":"([^"]*)".*""".r
val scanNumberRegx(scanNumber) = j

scanNumber //String = 123-456-123-123

Это будет работать, даже если поля json будут в другом порядке (но, конечно, сохраните структуру)

person roterl    schedule 16.09.2014