Gatling - correlating a json response (and modifying it in session)

I do one request and get a response body. I want to use this response body in the next request, but need to add an json node before doing so. Request 1 => Response 1:

{ “resourceType”: “Parameters”, “parameter”: [ { “name”: “medication”, “resource”: { “resourceType”: “Bundle”, “id”: “08eb0474-23a2-429b-93b2-ba38b96271ec”, “meta”: { “lastUpdated”: “2021-01-18T16:18:22.4474168+00:00”, “source”: “http://base-fhir.qa.forskrivning.no/Patient/$getMedication”, “profile”: [ “http://ehelse.no/fhir/StructureDefinition/sfm-MedicationBundle” ] }, “type”: “document”, “timestamp”: “2021-01-18T16:18:22.4473963+00:00”, “total”: 27, “link”: [ { “relation”: “self”, “url”: “http://base-fhir.qa.forskrivning.no/Patient/$getMedication” } ], “entry”: [ { “fullUrl”: “urn:uuid:8d3fd453-2933-4f39-9c90-4df868080f40”, “resource”: { “resourceType”: “Composition”, “id”: “a79f08c0-0b3c-4e26-adf4-6fc5d1305b36”, “meta”: { “profile”: [ “http://ehelse.no/fhir/StructureDefinition/sfm-MedicationComposition” ] }, “identifier”: { “use”: “official”, “value”: “9f9fdefe-4c5e-456f-b419-4871645ebd01” }, “status”: “final”, “type”: { “coding”: [ { “system”: “http://loinc.org”, “code”: “11503-0”, “display”: “Medical records” } ] }, “subject”: { “reference”: “urn:uuid:75ad528e-2db7-47a6-90cd-3677b9c5c7e4”, “display”: “Agnieszka Øvrelid” }, “date”: “2021-01-18T16:18:22.4183485+00:00”, “author”: [ { “reference”: “urn:uuid:a01b883a-752c-4b02-8b94-c175ff8602b3”, “display”: “Bengt Fos Minde, HPR: 431002790” } ], “title”: “Medication summary”, “confidentiality”: “N”, “section”: [ { “title”: “Medication”, “code”:

.
.
.

I want to add this element to the json body in the right place before doing another call (it has to be in a spesific place in the json-structure)

“relatesTo”: [ { “code”: “replaces”, “targetIdentifier”: { “use”: “official”, “value”: “57a9d650-ce21-42b2-a317-7d33a1eb4582” } } ]

The finished request body should be like this:

{ “resourceType”: “Parameters”, “parameter”: [ { “name”: “medication”, “resource”: { “resourceType”: “Bundle”, “id”: “307a7183-06af-465e-b094-8514cdedf9f5”, “meta”: { “lastUpdated”: “2020-11-06T07:44:28.6590617+00:00”, “source”: “http://base-fhir.qa.forskrivning.no/Patient/$getMedication”, “profile”: [ “http://ehelse.no/fhir/StructureDefinition/sfm-MedicationBundle” ] }, “type”: “document”, “timestamp”: “2020-11-06T07:44:28.6590219+00:00”, “total”: 24, “link”: [ { “relation”: “self”, “url”: “http://base-fhir.qa.forskrivning.no/Patient/$getMedication” } ], “entry”: [ { “fullUrl”: “urn:uuid:160f33ca-29c6-4ff7-ad9d-366fb17ebe9a”, “resource”: { “resourceType”: “Composition”, “id”: “cf61d45e-bae5-44e0-a64e-45f449958c3c”, “meta”: { “profile”: [ “http://ehelse.no/fhir/StructureDefinition/sfm-MedicationComposition” ] }, “identifier”: { “use”: “official”, “value”: “57a9d650-ce21-42b2-a317-7d33a1eb4582” }, “status”: “final”, “type”: { “coding”: [ { “system”: “http://loinc.org”, “code”: “11503-0”, “display”: “Medical records” } ] }, “subject”: { “reference”: “urn:uuid:09d55df4-b2db-45e2-a8b3-9891feef83ea”, “display”: “Agnieszka Øvrelid” }, “date”: “2020-11-06T07:44:28.6385246+00:00”, “author”: [ { “reference”: “urn:uuid:a4e51226-ea04-4f41-b6b2-b7a1b287f990”, “display”: “Selma Hadland, HPR: 2037661” } ], “title”: “Medication summary”, “confidentiality”: “N”, “relatesTo”: [ { “code”: “replaces”, “targetIdentifier”: { “use”: “official”, “value”: “57a9d650-ce21-42b2-a317-7d33a1eb4582” } } ], “section”: [ { “title”: “Medication”, “code”: { “coding”: [ { “system”: “http://ehelse.no/fhir/CodeSystem/sfm-section-types”, “code”: “sectionMedication”, “display”: “List of Medication statements” } ] },

How could I take the response and add an element in the session dynamically?

Hi,

I had faced a similar situation, so I have come with some logic, it may help you.

Request1 → Save your response body in session.
.post(appUrl)

.check(bodyString.saveAs(“RESPONSE_BODY”))
.exec(session=> {

//Use JsonFlattener package com.github.wnameless.json.flattener
val flattenMap=JsonFlattener.flattenAsMap(result)

//add/update values in map
if(flattenMap.containsKey(FX_CTRAMOUNT_JSONNODE)) {
flattenMap.put(FX_CTRAMOUNT_JSONNODE,ctrAmount.toString())
}

//convert to Json
val unFlattenJson=jsonUtil.unFlattenMap(flattenMap)

session.set(“RESPONSE_BODY”,unFlattenJson)

})
.exec(http(“Request2”)
.post(appUrl)

.body(StringBody(session=> session(“RESPONSE_BODY”).as[String])).asJson
.asJson.check(status.is(200))

Regards,
Umeshwaran.V