如果我理解正确,您的文件是由标题、数据/正文、页脚组成的平面文件结构,其中每个记录/段都是分隔记录。 Mule 的平面文件阅读器将无法工作,因为它只能支持固定宽度的记录。您可以做的是将每组记录分成字符串,然后将每条记录读取为 csv。我可以在两个转换步骤中做到这一点,Transform 1 - 读取文件并将有效负载解析为字符串数组,Transform 2 - 将字符串数组转换为正确的 json 格式。请注意,可能存在性能问题(如果您的平面文件太大),因为它将有效负载作为字符串保存在内存中。
流程:
变换 1:
%dw 2.0
output application/java
---
payload splitBy "\r\n"
变换 2:
%dw 2.0
output application/json
var sizePayload = sizeOf(payload)
---
{
header: read(payload[0], "application/csv", {"header" : false})[0],
body: read(payload[1 to sizePayload-2] joinBy "\n", "application/csv", {"header" : false}),
footer: read(payload[sizePayload-1], "application/csv", {"header" : false})[0],
}
给定下面的示例文件:
headerValue1,headerValue2,headerValue3,headerValue4,headerValue5
bodyvalue1,bodyvalue2,bodyvalue3,bodyvalue4,bodyvalue5,bodyvalue6,bodyvalue7,bodyvalue8,bodyvalue9
bodyvalue12ndRow,bodyvalue2,bodyvalue3,bodyvalue4,bodyvalue5,bodyvalue6,bodyvalue7,bodyvalue8,bodyvalue92ndRow
footervalue1,footervalue2,footervalue3,footervalue4
这将导致下面的json:
{
"header": {
"column_0": "headerValue1",
"column_1": "headerValue2",
"column_2": "headerValue3",
"column_3": "headerValue4",
"column_4": "headerValue5"
},
"body": [
{
"column_0": "bodyvalue1",
"column_1": "bodyvalue2",
"column_2": "bodyvalue3",
"column_3": "bodyvalue4",
"column_4": "bodyvalue5",
"column_5": "bodyvalue6",
"column_6": "bodyvalue7",
"column_7": "bodyvalue8",
"column_8": "bodyvalue9"
},
{
"column_0": "bodyvalue12ndRow",
"column_1": "bodyvalue2",
"column_2": "bodyvalue3",
"column_3": "bodyvalue4",
"column_4": "bodyvalue5",
"column_5": "bodyvalue6",
"column_6": "bodyvalue7",
"column_7": "bodyvalue8",
"column_8": "bodyvalue92ndRow"
}
],
"footer": {
"column_0": "footervalue1",
"column_1": "footervalue2",
"column_2": "footervalue3",
"column_3": "footervalue4"
}
}