Dataweave in Mule - Изменить значение массива объектов - PullRequest
1 голос
/ 09 апреля 2019

Я получаю полезную нагрузку в качестве ввода в компонент преобразования сообщений.Это массив с объектами:

 [
      {
          "enterprise": "Samsung",
          "description": "This is the Samsung enterprise",
      },
      {
          "enterprise": "Apple",
          "description": "This is the Apple enterprise ",
      }
  ]

У меня есть переменная, которая заменяет описание и вывод, который мне нужен:

[
      {
          "enterprise": "Samsung",
          "description": "This is the var value",
      },
      {
          "enterprise": "Apple",
          "description": "This is the var value",
      }
  ]

Я пытался использовать:

 %dw 2.0
 output application/java
 ---
 payload map ((item, index) -> {

     description: vars.descriptionValue
 })

Но возвращается:

 [
      {
          "description": "This is the var value",
      },
      {
          "description": "This is the var value",
      }
  ]

Возможно ли заменить только значение описания , оставив остальные поля? Как избежать добавления других полей в отображение .

1 Ответ

2 голосов
/ 09 апреля 2019

Есть много способов сделать это.

Один из способов сделать это - сначала удалить исходное поле описания, а затем добавить новое

%dw 2.0
output application/java
---
payload map ((item, index) -> 
    item - "description" ++ {description: vars.descriptionValue}
)

В противном случае вы можете использовать mapObject для перебора пар ключ-значение каждого объекта и с помощью pattern matching добавить case, когда ключом является описание. Я предпочитаю второй способ сделать это, когда я хочу сделать много замен.

%dw 2.0
output application/java
fun process(obj: Object) = obj mapObject ((value, key) -> {
    (key): key match {
        case "description" -> vars.descriptionValue
        else -> value
    }
})
---
payload map ((item, index) -> 
    process(item)
)
...