Доступ к значению массива в Nifi FreeFormTextRecordSetWriter - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь получить доступ к значениям массива в Json, используя FreeFormTextRecordSetWriter

Входные данные:

{"data": [["1580860800000", "67.2 "]]," itemid ": 5917," label ":" xxx "," type ":" stacked_element "}

Желаемый вывод

{" data1 " : "1580860800000", "data2": "67.2", "itemid": 5917, "label": "xxx", "type": "stacked_element"}

Это можно сделать с помощью Nifi Язык выражения?

1 Ответ

0 голосов
/ 10 февраля 2020

Я не верю, что FreeFormTextRecordSetWriter в настоящее время разрешает доступ к вложенным полям, пожалуйста, напишите Jira , чтобы добавить эту возможность, или, возможно, FreeFormTextRecordPathWriter, чтобы разрешить использование выражений RecordPath.

Я предполагаю, что если вы пытаетесь использовать FreeFormTextRecordSetWriter, то вы знаете, что в массиве data всегда будет две записи. В этом случае, поскольку ввод / вывод действителен JSON, если в потоковом файле есть один объект, вы можете использовать JoltTransform JSON со следующим значением spe c:

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "0": "data1",
          "1": "data2"
        }
      },
      "*": "&"
    }
  }
]

Если есть более одного JSON объекта в файле, вы можете использовать JoltTransformRecord с JsonTreeReader и JsonRecordSetWriter и приведенным выше spe c.

Если вы не знаете, сколько элементов в массиве, вы можете все еще разделяет их с помощью следующего spe c, но обратите внимание, что первый элемент имеет индекс 0, а не 1 (поэтому data0 вместо data1):

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

UpdateRecord - еще одна опция , но я считаю, что вам все равно придется знать, сколько элементов в массиве.

...