#mule #dataweave #mulesoft
#mule #dataweave #mulesoft
Вопрос:
Я хочу отфильтровать этот массив объектов на основе EmployeeStatus, который должен быть только отправлен в отставку и завершен, но не активен. Здесь ключи разные для каждого объекта, и, следовательно, я не могу применить логику like item.key.EmployeeStaus=="Resigned" or "Terminated"
.Любые предложения или подсказки были бы полезны для меня.
Ввод полезной нагрузки
[
{
"626433000000196190": [
{
"EmailID": "rubyrichards@zylker.com",
"Employeestatus": "Resigned"
}
]
},
{
"626433000000196184": [
{
"EmailID": "morganfinely@zylker.com",
"Employeestatus": "Active"
}
]
},
{
"626433000000196178": [
{
"EmailID": "jenniferjackson@zylker.com",
"Employeestatus": "Active"
}
]
},
{
"626433000000196166": [
{
"EmailID": "daveduken@zylker.com",
"Employeestatus": "Terminated"
}
]
}
]
Требуемый вывод
[
{
"EmailID": "rubyrichards@zylker.com",
"Employeestatus": "Resigned"
},
{
"EmailID": "daveduken@zylker.com",
"Employeestatus": "Terminated
}
]
Ответ №1:
Может быть, что-то вроде этого:
Входные данные
[
{
"626433000000196190": [
{
"EmailID": "rubyrichards@zylker.com",
"Employeestatus": "Resigned"
}
]
},
{
"626433000000196184": [
{
"EmailID": "morganfinely@zylker.com",
"Employeestatus": "Active"
}
]
},
{
"626433000000196178": [
{
"EmailID": "jenniferjackson@zylker.com",
"Employeestatus": "Active"
}
]
},
{
"626433000000196166": [
{
"EmailID": "daveduken@zylker.com",
"Employeestatus": "Terminated"
}
]
}
]
Скрипт
%dw 2.0
output application/json
---
flatten(payload map
($ mapObject {
b: $ filter ($.Employeestatus != "Active")
}).b -[])
Вывод
[
{
"EmailID": "rubyrichards@zylker.com",
"Employeestatus": "Resigned"
},
{
"EmailID": "daveduken@zylker.com",
"Employeestatus": "Terminated"
}
]
Ответ №2:
Вот еще один пример:
%dw 2.0
output application/json
var data = [
{
"626433000000196190": [
{
"EmailID": "rubyrichards@zylker.com",
"Employeestatus": "Resigned"
}
]
},
{
"626433000000196184": [
{
"EmailID": "morganfinely@zylker.com",
"Employeestatus": "Active"
}
]
},
{
"626433000000196178": [
{
"EmailID": "jenniferjackson@zylker.com",
"Employeestatus": "Active"
}
]
},
{
"626433000000196166": [
{
"EmailID": "daveduken@zylker.com",
"Employeestatus": "Terminated"
}
]
}
]
---
flatten({(data)} pluck $) filter not ($.Employeestatus == "Active")
Я добавлю пояснения позже.
РЕДАКТИРОВАТЬ: вот объяснение и ссылки на документацию DW:
- Я использую функцию dynamic elements
{(data)}
для уничтожения массива и свертывания всех вложенных объектов в объект. - Затем я использую
pluck
для получения только значений в массиве. - Я использую
flatten
для свертывания первого уровня вложенных массивов, потому что значения, которые мы толькоpluck
что отредактировали, также являются массивами. Теперь у вас есть плоский массив. - Теперь я использую
filter
для удаления удаления всех записей, которые не соответствуют утверждению справа.
Ответ №3:
Вы можете отфильтровать записи, пересмотрев структуру. Сначала массив, используя map. Каждый элемент представляет собой объект с одним ключом, поэтому давайте используем MapObject, затем filter . Я не пытался удалить пустые массивы.
%dw 2.0
output application/json skipNullOn="everywhere"
fun filterEmployeeStatus(e) = e filter ($.Employeestatus == "Resigned" or $.Employeestatus == "Terminated")
---
payload map
( $ mapObject ((value, key, index) -> (key): filterEmployeeStatus(value) ) )
Вывод:
[
{
"626433000000196190": [
{
"EmailID": "rubyrichards@zylker.com",
"Employeestatus": "Resigned"
}
]
},
{
"626433000000196184": [
]
},
{
"626433000000196178": [
]
},
{
"626433000000196166": [
{
"EmailID": "daveduken@zylker.com",
"Employeestatus": "Terminated"
}
]
}
]
Комментарии:
1. Привет, @aled.. Мы никак не можем удалить присутствующие ключи ?? .. Эти ключи мне больше не нужны .. Я просто хотел устранить сложность массива, присутствующего между ними, чтобы для дальнейших манипуляций мне было легче использовать результирующую полезную нагрузку, которая является требуемым результатом, как я показал выше в вопросе.. Просто мне любопытно узнать, возможно ли это или нет
2. выщипывание $ в конце скрипта должно помочь вам в этом.