I am trying to convert multipart format data to JSON dynamically
Input Data
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key1"
value1
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key2[name]"
name
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key2[phone]"
phone
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key2[location]"
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key2[vaid]"
true
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key3"
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key4"
value4
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key2[address][city]"
xyz
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key2[address][state]"
abc
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key2[address][code]"
5678
----------------------------439270980986078404603032
Content-Disposition: form-data; name="key2[address][country]"
US
----------------------------439270980986078404603032--
Expected Output
{
"key1": "value1",
"key2": {
"name": "name",
"phone": "phone",
"location": null,
"valid": true,
"address": {
"city": "xyz",
"state": "abc",
"code": 5678,
"country": "US"
}
},
"key3": null,
"key4": "value4"
}
DataWeave I tried
%dw 2.0
output application/json
---
{
"key1": payload.parts.key1.content,
"key2": {
"name": payload.parts."key2[name]".content,
"phone": payload.parts."key2[phone]".content,
"location": payload.parts."key2[location]".content,
"valid": payload.parts."key2[vaid]".content,
"address": {
"city": payload.parts."key2[address][city]".content,
"state": payload.parts."key2[address][state]".content,
"code": payload.parts."key2[address][code]".content,
"country": payload.parts."key2[address][country]".content
}
},
"key3": payload.parts.key3.content,
"key4": payload.parts.key4.content
}
The above DataWeave although gives expected output but it wont work for all type of scenarios like if we add or remove keys from payload. A dynamic solution would be more preferably in my case. Also for eg a scenario is there where name = key2[address][state][county]
that also needs to be handled dynamically.