#mule #dataweave #payload #mule-esb
#mule #dataweave #полезная нагрузка #mule-esb
Вопрос:
Итак, у меня есть полезная нагрузка со старыми типами атрибутов, и я хочу перенести их на новые, которые использует вся остальная логика. Поэтому, прежде чем выполнять проверку, я хочу немного ее изменить. В настоящее время мне удается добавлять и удалять в отдельных преобразованиях, но возможно ли это сделать за один раз?
пример полезной нагрузки:
{
"country": "Country",
"town": "Town",
"district": "Dist",
"owner": "Owner"
}
и вывод должен быть:
{
"country": "Country",
"city": "Town",
"area": "Dist",
"owner": "Owner"
}
поэтому я добавляю преобразование:
%dw 1.0
%output application/json
---
payload {city: payload.town}
when
payload.town != null
otherwise
payload {area: payload.distrinct}
when
payload.distrinct != null
otherwise
payload
Я хочу проверить, не имеет ли полезная нагрузка нулевых значений в ключе города, и добавить новый ключевой город со значением ключа города, и так же проверить, не является ли distrinct нулевым, затем добавьте его значение в качестве ключа области. Однако это происходит только для города (я знаю, что он будет добавлен внизу, но в моем случае порядок не является проблемой), однако ключи могут отсутствовать (это может быть не город, или не отвлекать, или не отвлекать)
И при следующем преобразовании:
%dw 1.0
%output application/json
---
payload -- {town: payload.town}
when
payload.town != null
otherwise
payload
Я пытаюсь проверить, существуют ли ключи, а затем удалить старые, но не повезло с такими: (
Любая помощь?
Комментарии:
1. Где находится преобразование удаления?
2. добавлено, но похоже на конструкцию add, просто есть — вместо
Ответ №1:
Это слишком сложно. Вместо добавления и удаления ключей вы можете просто использовать MapObject для преобразования каждого ключа. Тогда становится тривиальным параметризовать преобразование. Также использование default
проще, чем when...otherwise
когда значение равно null.
%dw 1.0
%output application/json
%var keyMap={ town: "city", district: "area" }
%function replaceKey(keyName) (keyMap[keyName] default keyName)
---
payload mapObject ( (replaceKey($)) : $ )
Комментарии:
1. ну, я не эксперт, поэтому прошу лучшего способа 🙂 Мне нравится ваш подход, и я очень признателен за вашу помощь. В этой функции, если где отсутствует ключ города (или район), будет ли он работать без ошибок?
2. Да, это то же самое, что обработка одного из других ключей, например, owner . MapObject работает независимо для каждого ключа.