mule - 使用 dataweave 从三/四个 json 数组列表生成所有可能的组合
问题描述
我正在研究骡子。在工作时,我遇到了一个场景,我想从传入的 JSON 数组列表(3-4 个数组对象)中生成所有可能的值组合。JSON 数组列表下的值是动态的。
我想以 JSON 格式生成输出。我只想使用数据编织来实现这一点。请帮助我如何使用 datawevae 在 mule 4 中实现这一点。
下面是我的 JSON 输入和所需的 JSON 输出。
注意:Json 数组列表是动态的。
输入 JSON 数组:
{
"airlines": [
{
"airlineId": "0520k",
"airlineName": "Kingfisher",
"airwayCost": 700
},
{
"airlineId": "0620i",
"airlineName": "indigo",
"airwayCost": 600
}
],
"hotels": [
{
"hotelId": "tj23a",
"hotelName": "Taj",
"hotelCost": 600
},
{
"hotelId": "f",
"hotelName": "fdg",
"hotelCost": 600
}
],
"cabs": [
{
"cabId": "ola2312",
"cabName": "Ola",
"Cost": "600"
}
]
}
输出:
{
"itenary 1": {
"hotelDetails": {
"hotelId": "tj23a",
"hotelName": "Taj",
"hotelCost": 6000
},
"airlines": {
"airlineId": "0520k",
"airlineName": "Kingfisher",
"airwayCost": 1700
},"cabs":
{
"cabId": "ola2312",
"cabName":"Ola",
"Cost":"600"
},
"TripPackage" : 8300
},
"itenary 2": {
"hotelDetails": {
"hotelId": "Mnva",
"hotelName": "Minvera",
"hotelCost": 1600
},
"airlines": {
"airlineId": "0520k",
"airlineName": "Kingfisher",
"airwayCost": 1700
},
"cabs":
{
"cabId": "ola2312",
"cabName":"Ola",
"Cost":"600"
},
"TripPackage" : 3900
},
"itenary 3": {
"hotelDetails": {
"hotelId": "tj23a",
"hotelName": "Taj",
"hotelCost": 6000
},
"airlines": {
"airlineId": "0620i",
"airlineName": "indigo",
"airwayCost": 1600
},
"cabs":
{
"cabId": "ola2312",
"cabName":"Ola",
"Cost":"600"
},
"TripPackage" : 8200
},
"itenary 4": {
"hotelDetails": {
"hotelId": "Mnva",
"hotelName": "Minvera",
"hotelCost": 1600
},
"airlines": {
"airlineId": "0620i",
"airlineName": "indigo",
"airwayCost": 1600
},
"cabs":
{
"cabId": "ola2312",
"cabName":"Ola",
"Cost":"600"
},
"TripPackage" : 3800
}
}
我可以使用 flatten 和 map 为 2 个数组对象编写数据编织代码,但没有更多的数组对象组合。
解决方案
我很确定 Salim Khan 的答案更高效,但这里是 map and flatten 解决方案,以防它对任何人有用。
%dw 2.0
output application/json
var hotelCount = sizeOf(payload.hotels)
var cabCount = sizeOf(payload.cabs)
fun itineraryNum(ia, ih, ic) = ia * hotelCount * cabCount + ih * cabCount + ic + 1
---
flatten(flatten(
payload.airlines map ((a, ia) ->
payload.hotels map ((h, ih ) ->
payload.cabs map ((c, ic) -> {
("itinerary " ++ itineraryNum(ia, ih, ic) as String): {
hotelDetails: {
hotelId: h.hotelId,
hotelName: h.hotelName,
hotelCost: h.hotelCost
},
airlineDetails: {
airlineId: a.airlineId,
airlineName: a.airlineName,
airwayCost: a.airwayCost
},
cabs: {
cabId: c.cabId,
cabName: c.cabName,
Cost: c.Cost
},
TripPackage: h.hotelCost + a.airwayCost + c.Cost
}
})
)
)
))
推荐阅读
- bash - bash 脚本如何更改条件表达式以使其接受“y”和“Y”
- c++ - 如何在表格视图之间共享选择?
- python - 字典到 JSON 或 Dataframe 到 JSON 导出不产生方括号
- java - 用封闭的字符串和空格分割字符串
- node.js - Mongo:如何在级联关系中获取文档计数
- file - 每当它们在 github 中更新时,如何更新我的计算机中的文件?
- vba - 使用 vba + selenium 取消选中滑块复选框
- reactjs - 类似于 Twitter 的 React Native 配置文件布局
- python - 如何将基于毫米的数字转换为表示哪个部分是米、厘米和毫米的数字?
- python - 跨多个进程的 Django 日志记录的最佳选择