Convert Delimiter fille to JSON format using Dataweave in Mule Convert Delimiter fille to JSON format using Dataweave in Mule json json

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