Я получаю полезную нагрузку в качестве входных данных в компоненте преобразования сообщений. Это массив с объектами:
[
{
"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",
}
]
Возможно ли заменить только значение описания сохранить остальные поля? Избегайте добавления других полей в сопоставление.
Есть много способов сделать это.
Один из способов сделать это — сначала удалить исходное поле описания, а затем добавить новое.
%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)
)