как правильно добавлять и удалять элементы из полезной нагрузки? (или заменить при условии)

#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 работает независимо для каждого ключа.