Как обеспечить ввод для толчка, когда задано несколько объектов - PullRequest
0 голосов
/ 27 апреля 2020

Как применить преобразование к файлу json, имеющему записи в следующем формате (не массив, просто несколько объектов). Я хочу предоставить файл со следующим форматом ввода и после применения трансформации. Хочу сохранить его в какой-то папке. пример:

Формат входной записи

    {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   .....

Требуемый формат выходной записи

   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   // Just changing the name key to fname
   .....

1 Ответ

0 голосов
/ 28 апреля 2020

Поскольку вы пометили apache-nifi Я предполагаю, что вы хотите использовать один из процессоров JOLT в Apache NiFi для этого. В этом случае JoltTransform JSON не будет работать, потому что ожидает действительное значение JSON, как сказал Даггетт. Однако синтаксический анализатор JSON в JsonTreeReader более снисходителен, поэтому вы можете использовать JoltTransformRecord с JsonTreeReader и следующими параметрами c:

[
  {
    "operation": "shift",
    "spec": {
      "name": "fname",
      "*": "&"
    }
  }
]

Хотя вы не можете "красиво напечатать" JSON без действительного значения JSON вы можете установить свойство группировки выходных данных в JsonRecordSetWriter равным One Line Per Object. Это даст вам что-то вроде:

{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
...