我有以下SQL Server选择查询:
SELECT s.RefId
,s.LocalId
,s.StateProvinceId
,s.SchoolName
,e.Email
,e.EmailType
FROM SchoolInfo s
LEFT OUTER JOIN SchoolEmail e
ON e.SchoolRefId = s.RefId
WHERE s.RefId = :ref_id
在DataWeave中转换为JSON:
%dw 2.0
output application/json
---
payload
输出:
[
{
"StateProvinceId": "SA",
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"EmailType": "prm",
"LocalId": "1",
"SchoolName": "Steve's School",
"Email": "[email protected]"
},
{
"StateProvinceId": "SA",
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"EmailType": "sec",
"LocalId": "1",
"SchoolName": "Steve's School",
"Email": "[email protected]"
}
]
但是我希望将其与通用元素合并以生成所需的输出:
{
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"LocalId": "1",
"StateProvinceId": "SA",
"SchoolName": "Steve's School",
"Emails": [
{
"Email": "[email protected]",
"EmailType": "prm"
},
{
"Email": "[email protected]",
"EmailType": "sec"
}
]
}
我如何在M子4中做到这一点?
谢谢,史蒂夫
甚至是这个
%dw 2.0
output application/json
var Emails =
"Emails": payload map {
Email: $.Email,
EmailType: $.EmailType
}
---
payload distinctBy($.StateProvinceId) map {
StateProvinceId: $.StateProvinceId,
RefId: $.RefId,
Emails: Emails.Emails
}
(payload map {
StateProvinceId: $.StateProvinceId,
RefId: $.RefId,
Emails: Emails.Emails
})[0]
我希望这能给你这个主意。
%dw 2.0
output application/json
var Emails = [
"Emails": payload map {
Email: $.Email,
EmailType: $.EmailType
}
]
---
payload distinctBy($.StateProvinceId) map {
StateProvinceId: $.StateProvinceId,
RefId: $.RefId,
Emails: Emails.Emails[0]
}
这可能会为您提供更通用的方法:
%dw 2.0
output application/json
fun returnEmail() =
payload groupBy($.StateProvinceId) mapObject {
($$): $ map {
Email: $.Email,
EmailType: $.EmailType
}
}
---
payload distinctBy($.StateProvinceId) map {
StateProvinceId: $.StateProvinceId,
RefId: $.RefId,
Emails: returnEmail()[$.StateProvinceId]
}
@@ Salim Khan的答案很正确。只需加reduce
即可将数组转换为对象,作为与您的响应格式完全匹配的最后一位]
%dw 2.0
var email = payload map (item,index) -> {
"Email":item.Email,
"EmailType":item.EmailType }
output application/json
---
payload distinctBy($.StateProvinceId) map {
"StateProvinceId": $.StateProvinceId,
"RefId": $.RefId,
"LocalId": $.LocalId,
"SchoolName": $.SchoolName,
"Emails":email } reduce $