JOLT — разбить массив на элементы для Nifi Databaserecord

#arrays #json #transform #apache-nifi #jolt

#массивы #json #преобразовать #apache-nifi #jolt

Вопрос:

Я борюсь с некоторым преобразованием jolt. Мне нужно извлечь информацию из массива, но также нужна некоторая информация верхнего уровня. У меня есть счета, и некоторые счета имеют несколько вложений. Я хочу сохранить эти вложения в Postgress db и для каждого вложения указать идентификатор счета…

Мой ввод

 [
  {
    "bill_id": 1,
    "entities": [
      {
        "type": "alpha",
        "data": "foo"
      },
      {
        "type": "beta",
        "data": "bar"
      }
    ]
  },
  {
    "bill_id": 2,
    "entities": []
  }
]
 

Мой желаемый результат

 [
  {
    "bill_id": 1,
    "type": "alpha",
    "data": "foo"
  },
  {
    "bill_id": 1,
    "type": "beta",
    "data": "bar"
  }
]
 

Я был бы очень рад, если бы кто-нибудь мог мне помочь

Ответ №1:

Что ж, я нашел ответ, который идеально соответствует моим потребностям. Немного сложно, но он отлично работает в две смены:

 [
  {
    "operation": "shift",
    "spec": {
      "*": {
        "entities": {
          "*": {
            "@(2,bill_id)": "[amp;3].[amp;1].bill_id",
            "type": "[amp;3].[amp;1].type",
            "data": "[amp;3].[amp;1].data"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[]"
      }
    }
  }
]