Как извлечь более одного поля из JSON в Nifi? - PullRequest
0 голосов
/ 14 марта 2019

У меня есть JSON полезная нагрузка вот так;

{
   "id": "",
   "name": "",
   "A": {...},
   "B": {...},
   "C": {...}
}

И я хочу извлечь A, B and C поля с полем id and name в качестве другой записи.Вот так;

{
       "id": "",
       "name": "",
       "A": {...}
}

{
       "id": "",
       "name": "",
       "B": {...}
}

{
       "id": "",
       "name": "",
       "C": {...}
}

Я использую основанные на записи процессоры.Но я не знаю, как я могу сделать это в Nifi, используя процессоры, основанные на записях.

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Если вы хотите использовать процессоры, основанные на записях, тогда JoltTransformRecord сделает свое дело.Просто установите Jolt Transformation DSL как Chain и Jolt Specification как:

[
  {
    "operation": "shift",
    "spec": {
      "id": "id",
      "name": "name",
      "*": {
        "@": "array.&"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "array": {
        "*": {
          "@(2,id)": "[#2].id",
          "@(2,name)": "[#2].name",
          "@": "[#2].&"
        }
      }
    }
  }
]

Сначала все уникальные элементы будут помещены в массив и отделены от них общие ключи, а затем общие ключи помещены ввсе элементы при извлечении массива в верхний массив.

Тогда, если вы хотите, чтобы они также были разными FlowFiles, вы можете SplitRecord массив, и вы его получили!

1 голос
/ 15 марта 2019

"EvaluateJsonPath", вероятно, то, что вы ищете. Вы можете добавить выражения JSONPath, которые будут преобразованы в атрибуты или записаны в файл потока.

http://jsonpath.com/ - это удобный веб-инструмент для проверки ваших выражений.

...