I did a medium complex functional test setup with Gatling - below you find an example request which uses a couple of JSONPath expression to extract values to be used in the next request
val get: ChainBuilder = exec(http("my/accounts")
.get(ConfigurationTool.getURL("george", "/my/accounts"))
.header("Authorization", "bearer ${token}")
.header(X_REQUEST_ID, XRequestId())
.queryParam("_", "${user}")
.check(
bodyString.saveAs("lastResponse"),
jsonPath("$.collection[*].id").ofType[String].findAll.optional.saveAs("accountIds"),
jsonPath("$.collection[?(@.balance.currency)].id").ofType[String].findAll.optional.saveAs("accountIdsHavingBalance"),
jsonPath("$.collection[?(@.hasImage == true)].id").ofType[String].findAll.optional.saveAs("accountIdsHavingImage"),
jsonPath("$.collection[?(@.type == 'CURRENT' || @.type == 'SAVING')].id").ofType[String].findAll.optional.saveAs("accountIdsForStatsCall"),
jsonPath("$.collection[?(@.type == 'CURRENT' || @.type == 'SAVING' || @.type == 'LOAN')].id").ofType[String].findAll.optional.saveAs("accountIdsForTransactionCall"))
)