Convert Delimiter fille to JSON format using Dataweave in Mule
Very interesting question you can use readLines
function from dw::core::Binaries
and then split by ~#~
. Remember to set your payload to application/octet-stream
mimeType so dw will handle this as a Binary data and later you can use this snippet to parse it.
%dw 2.0output application/jsonimport dw::core::Binariesvar lines = Binaries::readLinesWith(payload, "UTF-8")---lines match { case [x ~ xs] -> do { var header = x splitBy "~#~" --- xs map ((item, index) -> { (item splitBy "~#~" map (column, index) -> { (header[index]): column } ) }) }}
With the following input (input.txt):
Name~#~ID~#~Company~#~AddressSRI~#~1~#~Infy~#~BangaloreRahul~#~2~#~IBM~#~USJohn~#~3~#~SF~#~UK
And the following DataWeave code:
%dw 2.0output application/jsonvar payload = readUrl("classpath://input.txt","text/plain") splitBy(/\r\n/)var header= payload[0] splitBy(/~#~/)var data = payload[1 to -1]---data map (item, index) -> {(item splitBy(/~#~/) map { (header[$$]): $ })}
The result is:
[ { "Name": "SRI", "ID": "1", "Company": "Infy", "Address": "Bangalore" }, { "Name": "Rahul", "ID": "2", "Company": "IBM", "Address": "US" }, { "Name": "John", "ID": "3", "Company": "SF", "Address": "UK" }]
I recommend an array as an output