У меня есть входной JSON, и я хочу преобразовать этот JSON в формат файла с фиксированной шириной.
Я хотел знать, есть ли способ преобразовать файл JSON в формат файла с фиксированной шириной в Nifi, используя какой-либо процессор или свойство при записи записей.
Формат файла с фиксированной шириной и длиной является текстовым форматом.
Вот пример ввода Json
[
{
"orderId": "1234567890",
"orderName": "Test1"
},
{
"orderId": "12235",
"orderName": "Test2"
},
{
"orderId": "12236",
"orderName": "Test3"
}
]
Вот ожидаемый результат:
1234567890 Test1
12235 Test2
12236 Test3
Любые выводы будут полезны.
Заранее спасибо!





Если ваш ввод JSON будет относительно плоским, вы можете использовать процессор ConvertRecord.
Настройте JsonTreeReader и CSVRecordSetWriter, и вы должны получить результирующий выходной файл потока, как показано ниже.
Примечание. Вы можете настроить свойства
CSVRecordSetWriter, если хотите исключить заголовок.
Привет @DataWrangler, спасибо за ваш комментарий. Но если я использую CSVRecordSetWriter, он просто запишет его в CSV. Он не будет создавать файл фиксированной длины. Я хочу иметь конечные пробелы в значениях поля, если длина значения меньше требуемой длины поля.
С тех пор я нашел способ сделать это без написания собственного Record Writer. Я использовал процессор ConvertRecord, от JSONTreeReader до FreeFormTextRecordSetWriter. JSON выглядит так:
[
{
"userId": "68156",
"firstName": "Vesta",
"lastName": "Herzog"
},
{
"userId": "64191",
"firstName": "Jenifer",
"lastName": "Bosco"
}
]
Затем настройте свойство Text объекта FreeFormTextRecordSetWriter следующим образом:
${userId:padRight(10,' ')}${lastName:padRight(15,' ')}${firstName:padRight(15,' ')}
Это создает файл фиксированной ширины шириной 40 символов, в котором идентификатор пользователя начинается с символа 1, фамилия начинается с символа 11, а имя начинается с символа 26.
68156 Herzog Vesta
64191 Jenifer Bosco
Универсальный модуль записи файлов с фиксированной шириной, который можно было бы настроить, был бы намного лучше, особенно если у вас есть несколько форматов с фиксированной шириной для создания. Тем не менее, это делает работу.
Спасибо за ваш ответ @Walker White! Я также понял это, используя FreeFormTextRecordSetWriter, и я использовал процессор JoltTransform, чтобы добавить необходимое дополнение!
Мне было бы очень интересно, как вы настроите JoltTransform, если вы готовы поделиться им, так как мое решение выше не очень поддерживается. Спасибо.