Можем ли мы написать/подготовить тип файла с фиксированной шириной и длиной в Nifi?

У меня есть входной JSON, и я хочу преобразовать этот JSON в формат файла с фиксированной шириной.

Я хотел знать, есть ли способ преобразовать файл JSON в формат файла с фиксированной шириной в Nifi, используя какой-либо процессор или свойство при записи записей.

Формат файла с фиксированной шириной и длиной является текстовым форматом.

Вот пример ввода Json

[
  {
    "orderId": "1234567890",
    "orderName": "Test1"
  },
  {
    "orderId": "12235",
    "orderName": "Test2"
  },
  {
    "orderId": "12236",
    "orderName": "Test3"
  }
]

Вот ожидаемый результат:

1234567890 Test1     
12235      Test2     
12236      Test3     

Любые выводы будут полезны.

Заранее спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если ваш ввод JSON будет относительно плоским, вы можете использовать процессор ConvertRecord.

Настройте JsonTreeReader и CSVRecordSetWriter, и вы должны получить результирующий выходной файл потока, как показано ниже.

Примечание. Вы можете настроить свойства CSVRecordSetWriter, если хотите исключить заголовок.

Привет @DataWrangler, спасибо за ваш комментарий. Но если я использую CSVRecordSetWriter, он просто запишет его в CSV. Он не будет создавать файл фиксированной длины. Я хочу иметь конечные пробелы в значениях поля, если длина значения меньше требуемой длины поля.

janvit04 21.04.2023 07:23
Ответ принят как подходящий

С тех пор я нашел способ сделать это без написания собственного 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, чтобы добавить необходимое дополнение!

janvit04 02.06.2023 07:11

Мне было бы очень интересно, как вы настроите JoltTransform, если вы готовы поделиться им, так как мое решение выше не очень поддерживается. Спасибо.

Walker White 02.06.2023 14:22

Другие вопросы по теме