Конвертировать Nested JSON в CSV с константами в NiFi - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок в NiFi и работаю над небольшим ПО C, который получает данные в формате JSON. Json должен быть преобразован в CSV. Я добился того, чтобы это работало, когда JSON имеет четко определенную структуру, скажем, от 1 до 1 для пар ключ: значение, но я пытаюсь сделать следующее:

{
  "id": "SS01-P001-I001",
  "timestamp": "2020-04-26 11:55:44.774604-04:00",
  "data": [
    {
      "name": "SS01-P001-I001-0",
      "value": "0.0"
    },
    {
      "name": "SS01-P001-I001-1",
      "value": "0.0"
    },
    {
      "name": "SS01-P001-I001-2",
      "value": "0.0"
      }
    ]
  }

в это:

timestamp, id, name, value
"2020-04-26 11:55:44.774604-04:00", "SS01-P001-I001", "SS01-P001-I001-0", 0.0
"2020-04-26 11:55:44.774604-04:00", "SS01-P001-I001", "SS01-P001-I001-1", 0.0
"2020-04-26 11:55:44.774604-04:00", "SS01-P001-I001", "SS01-P001-I001-2", 0.0

Я застреваю, используя две константы (timestamp, id) в содержимом файла потока NiFi JSON снова и снова для каждой итерации имени и значения.

Надеюсь, этой информации достаточно для помощи.

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

1 Ответ

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

Вы можете преобразовать входные данные JSON в «строки», используя JoltTransform JSON со следующими показателями c:

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "@(2,timestamp)": "[&1].timestamp",
          "@(2,id)": "[&1].id",
          "*": "[&1].&"
        }
      }
    }
  }
]

Затем вы можете использовать ConvertRecord для преобразования из JSON в CSV , В качестве альтернативы вы можете попробовать ForkRecord для разделения на массив data с «Включить родительские поля», установленным на true и CSVRecordSetWriter. Если разветвленные потоковые файлы имеют неправильный формат, вы можете использовать процессор, такой как JoltTransformRecord или UpdateRecord, чтобы перевести его в нужный формат.

...