1

想要在 http 响应中捕获一个名为 scanNumber 的变量,如下所示:

{"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"}]}}

我怎样才能通过常规的表达来做到这一点?我正在使用的工具是 Gatling 压力工具(使用 Scala DSL)

我试图这样做:

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

但我得到了错误:

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

3 回答 3

4

你第一次很接近。

你真正想要的是:

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

或者可能:

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

请注意,这使用 jsonPath,而不是正则表达式。JsonPath 应该比正则表达式更可靠。

查看JsonPath 规范以了解更高级的用法。

于 2014-11-13T13:47:52.463 回答
0

使用这个正则表达式在 json 中的任何地方匹配它:

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

如果你想匹配只是发生在你说使用的结构中:

/\{[^{[]+\{[^{[]+\[\{[^{[]*("scanNumber":"[^"]+")/
于 2014-09-15T20:48:14.613 回答
0

由于 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 字段的顺序不同,这也会起作用(但当然要保持结构)

于 2014-09-16T13:43:57.167 回答