使用Mule中的Dataweave将Delimiter fille转换为JSON格式

问题描述

我需要使用m子中的dataweave将现有的分隔符文件转换为json格式。

样本输入:

Name~#~ID~#~Company~#~Address
SRI~#~1~#~Infy~#~Bangalore
Rahul~#~2~#IBM~#~US
John~#~3~#~SF~#~UK

样本输出

{
Name: Sri
ID: 1
Company: Infy
Adress: Bangalore
},{
Name: Rahul
ID: 2
Company: IBM
Adress: US

},{
Name: John
ID: 3
Company: SF
Adress: UK
}

但是我的输出低于输出

Output

Dataweave转换

Dataweave Transforamtion

解决方法

一个非常有趣的问题,您可以使用readLines中的dw::core::Binaries函数,然后将其除以~#~。请记住,将有效负载设置为application/octet-stream mimeType,以便dw将其作为二进制数据进行处理,以后您可以使用此代码段对其进行解析。

%dw 2.0
output application/json
import dw::core::Binaries
var 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
              } )
        })
    }
}
,

使用以下输入(input.txt):

Name~#~ID~#~Company~#~Address
SRI~#~1~#~Infy~#~Bangalore
Rahul~#~2~#~IBM~#~US
John~#~3~#~SF~#~UK

以及以下DataWeave代码:

%dw 2.0
output application/json

var 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[$$]): $ 
    })}

结果是:

[
  {
    "Name": "SRI","ID": "1","Company": "Infy","Address": "Bangalore"
  },{
    "Name": "Rahul","ID": "2","Company": "IBM","Address": "US"
  },{
    "Name": "John","ID": "3","Company": "SF","Address": "UK"
  }
]

我建议将数组作为输出