07-13-2023 09:40 PM
Hi All,
Good morning,
I have a requirement for converting json into xml with attributes.
So, I understood in order to make the XML with attributes from json, I have to have below structure of json to be feed to xml formatter for final conversion.
Required JSON format,
[
“h1”: {
“h2”:{
“f”:[
{“@name”:“Field1”,“$”:“10/3930”},
{“@name”:“Field2”,“$”:“true”}
]
}
}
]
My Original json is like this
[
{
“Field1”:“10/3930”
“Field2”:“true”
}
]
How to convert original json to required json structure for XML formatter.
Any help will be much appreicated.
Regards,
San
07-14-2023 09:29 AM
Maybe the following expression will provide some assistance to get you close.
{"h1": { "h2": {f: $.entries().map(x => {"@name": x[0],"$": x[1]}) }}}
This expression combines the Object entries() and the Array map() functions together to build out the transformation and embeds the result into a hard-coded wrapper object for the complete body.
The attached Pipeline shows the expression in practice:
Community.17106.slp (4.7 KB)
I hope this helps
07-16-2023 10:56 PM
Thanks Del.
It works like a charm, but I had another issue with given expression.
Usually, when we have blank value in xml, the closing field name should be removed. It doesn;t work with above expression.
For example, when Field2 is blank, it should completely remove the $ value. I tried filter function on values ($.filter((val, key) => (val != ‘’))), but it was not working as it works on entire column($) after conversion as per our expression.
Desired output, when field2 is blank
[
“h1”: {
“h2”:{
“f”:[
{“@name”:“Field1”,“$”:“10/3930”},
{“@name”:“Field2”}
]
}
}
]
Regards,
San
07-17-2023 06:53 AM
I think you can add your filter expression within the complete expression where the new object is being created:
{"h1": { "h2": {f: $.entries().map(x => {"@name": x[0],"$": x[1]}.filter((val, key) => (val != ''))) }}}