如何将数组中的数据映射到 Mule Dataweave 中具有不同索引的另一个数组输出
How to map data in an array to another array output with different index in Mule Dataweave
我有一个 JSON 这样的:
{
"invoice-line": [
{
"id": "01",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "1",
"item": "Mouse",
"descrption": "This is line 1 item"
},
{
"id": "02",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "2",
"item": "Keyboard",
"descrption": "This is line 2 item"
},
{
"id": "03",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "3",
"item": "Monitor",
"descrption": "This is line 3 item"
}
]
}
从这个输入 JSON 我们需要提取数据并映射到另一个输出 JSON 但逻辑是:
当 line-num = 1 then map id, date, sales-date, description
然后休息,否则数组将映射 id、item、descrption
如下所示:
{
"row": [
{
"id": "01",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "1",
"item": "",
"descrption": "This is line 1 item"
},
{
"id": "02",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Mouse",
"descrption": "This is line 2 item"
},
{
"id": "03",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Monitor",
"descrption": "This is line 3 item"
}
]
}
还有可能执行类似将数组项(第一个索引)映射到不同输出数组的操作吗?例如:
{
"row": [
{
"id": "",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "1",
"item": "",
"descrption": ""
},
{
"id": "01",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Keyboard",
"descrption": "This is line 1 item"
},
{
"id": "02",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Mouse",
"descrption": "This is line 2 item"
},
{
"id": "03",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Monitor",
"descrption": "This is line 3 item"
}
]
}
希望这就是您要找的:
%dw 1.0
%output application/json
---
row:
(payload.invoice-line filter ($.line-num == '1') map {
id: "",
date: $.date,
sales-date: $.sales-date,
line-num: $.line-num,
item: "",
descrption: ""
})
++
(payload.invoice-line map {
id: $.id,
date: "",
sales-date: "",
line-num: "",
item: $.item,
descrption: $.descrption
})
产生:
{
"row": [
{
"id": "",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "1",
"item": "",
"descrption": ""
},
{
"id": "01",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Mouse",
"descrption": "This is line 1 item"
},
{
"id": "02",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Keyboard",
"descrption": "This is line 2 item"
},
{
"id": "03",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Monitor",
"descrption": "This is line 3 item"
}
]
}
我有一个 JSON 这样的:
{
"invoice-line": [
{
"id": "01",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "1",
"item": "Mouse",
"descrption": "This is line 1 item"
},
{
"id": "02",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "2",
"item": "Keyboard",
"descrption": "This is line 2 item"
},
{
"id": "03",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "3",
"item": "Monitor",
"descrption": "This is line 3 item"
}
]
}
从这个输入 JSON 我们需要提取数据并映射到另一个输出 JSON 但逻辑是:
当 line-num = 1 then map id, date, sales-date, description
然后休息,否则数组将映射 id、item、descrption
如下所示:
{
"row": [
{
"id": "01",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "1",
"item": "",
"descrption": "This is line 1 item"
},
{
"id": "02",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Mouse",
"descrption": "This is line 2 item"
},
{
"id": "03",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Monitor",
"descrption": "This is line 3 item"
}
]
}
还有可能执行类似将数组项(第一个索引)映射到不同输出数组的操作吗?例如:
{
"row": [
{
"id": "",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "1",
"item": "",
"descrption": ""
},
{
"id": "01",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Keyboard",
"descrption": "This is line 1 item"
},
{
"id": "02",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Mouse",
"descrption": "This is line 2 item"
},
{
"id": "03",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Monitor",
"descrption": "This is line 3 item"
}
]
}
希望这就是您要找的:
%dw 1.0
%output application/json
---
row:
(payload.invoice-line filter ($.line-num == '1') map {
id: "",
date: $.date,
sales-date: $.sales-date,
line-num: $.line-num,
item: "",
descrption: ""
})
++
(payload.invoice-line map {
id: $.id,
date: "",
sales-date: "",
line-num: "",
item: $.item,
descrption: $.descrption
})
产生:
{
"row": [
{
"id": "",
"date": "2019-06-21",
"sales-date": "2019-06-21",
"line-num": "1",
"item": "",
"descrption": ""
},
{
"id": "01",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Mouse",
"descrption": "This is line 1 item"
},
{
"id": "02",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Keyboard",
"descrption": "This is line 2 item"
},
{
"id": "03",
"date": "",
"sales-date": "",
"line-num": "",
"item": "Monitor",
"descrption": "This is line 3 item"
}
]
}