Как в Mule / Dataweave преобразовать HashMap в массив, если ключ и значение являются числами

Как в Mule / Dataweave преобразовать / преобразовать HashMap в массив. У меня есть HashMap, ключ и значение которого - динамические числа.

Пример:

{"3.2" : 1, "22" : 8, "2.0" : 1}

Я хочу преобразовать его в эту структуру:

[
  {
    "name": "app-a",
    "value1": 3.2,
    "value2": 1
  },
  {
    "name": "app-a",
    "value1": 22,
    "value2": 8
  },
  {
    "name": "app-a",
    "value1": 2,
    "value2": 1
  }
]

Решение (спасибо @Sulthony H)

%dw 1.0
%output application/json
---
payload pluck $$ map {
value1: ($ as :string) as :number,
value2: payload[$]
}

person gnanagurus    schedule 17.03.2017    source источник


Ответы (2)


Чтобы преобразовать HashMap в массив, я сделаю следующие шаги:

  1. Итерируйте HashMap по его ключу, используя оператор pluck в DataWeave: payload pluck $$ map {}
  2. Преобразуйте ключ в число: value1: ($ as :string) as :number
  3. Получите значение на основе этого ключа: value2: payload[$]
person sulthony h    schedule 17.03.2017
comment
Потрясающие. Идеальное решение. Я также обновил по вопросам фактический код плетения. - person gnanagurus; 17.03.2017

Другое другое решение:

%dw 1.0
%output application/json
---
payload map {
    ($ mapObject {
        name: "app-a",
        value1: $$ as :string,
        value2: $
    })
}

1 - Используйте оператор карты для итерации по списку элементов. карта полезной нагрузки

2 - Используйте mapObject для каждого элемента вашего массива $ mapObject. В mapObject $$ относится к имени ключа, $ относится к значению

3 - распечатать значения со значением1: $$ как: строка, значение2: $

Еще проще ...

payload pluck (
    {
        value1:$$,
        value2:$
    }
)
person mario martinez    schedule 22.03.2017