Преобразование много в один JSON в JSON - PullRequest
0 голосов
/ 30 июня 2018

Мне нужно преобразовать набор входящих jsons, как показано ниже, в общую структуру на выходе. Структура входящих jsons, как показано ниже

Ввод JSON 1 { "JR_ID": "1", "JR_Data": "некоторый текст" }

Ввод JSON 2 { "TA_ID": "1", "TA_Data": "некоторый текст" }

Ввод JSON 3

{ "IM_ID": "1", "IM_Data": "некоторый текст" }

.. и многие другие

Выходная структура JSON выглядит следующим образом

Структура вывода

{ "OBJECT_ID": "1", "OBJECT_Data": "некоторый текст" }

Входные jsons будут приходить по одному, и задача состоит в том, чтобы динамически отобразить поле идентификатора входящего JSON в OBJECT_ID выходного JSON и то же для поля данных.

Как я могу использовать для этого язык выражений мулов или dataweave? Есть ли другое доступное решение?

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Учитывая, что ваш ввод, кажется, отображается на ваш вывод через *_ID или *_Data, этот скрипт должен помочь вам:

%dw 1.0
%output application/json
---
payload pluck ($$ as :string) reduce ((key, out={}) ->
  key match {
    k when key contains "ID"   -> out ++ {"OBJECT_ID":   payload[k]},
    k when key contains "Data" -> out ++ {"OBJECT_Data": payload[k]},
    default                    -> out  
  }
)

Сначала он получает список всех клавиш входного объекта - payload pluck ($$ as :string). Приведение as :string таково, что мы можем позже проверить, содержит ли ключ определенную подстроку. Затем мы используем reduce для построения искомого выходного объекта, добавив пару OBJECT_ID ключ: значение к выходному объекту, когда ключ ввода содержит "ID", и добавив пару OBJECT_Data ключ: значение в объект вывода, когда ключ содержит "Data".

0 голосов
/ 02 июля 2018

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

%dw 1.0
%output application/json
---
{
    OBJECT_ID : payload[0],
    OBJECT_Data : payload[1]
}
...