Если я правильно понимаю, ваш файл представляет собой плоскую файловую структуру, состоящую из заголовка, данных / тела, нижнего колонтитула, где каждая запись / сегмент является записью с разделителями. Программа чтения плоских файлов Mule не будет работать, поскольку она может поддерживать только записи фиксированной ширины. Что вы можете сделать, это разделить каждую группу записей на строку, а затем прочитать каждую запись как CSV. Я могу сделать это за два шага преобразования: Преобразование 1 - чтобы прочитать файл и проанализировать полезную нагрузку как массив строк, Преобразование 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"
}
}