在 Mule 4 中合并 JSON 中的元素
Merge elements in JSON within Mule 4
我有以下 SQL 服务器 select 查询:
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": "steven@email.com"
},
{
"StateProvinceId": "SA",
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"EmailType": "sec",
"LocalId": "1",
"SchoolName": "Steve's School",
"Email": "test@gmail.com"
}
]
但我希望通过公共元素合并它以生成所需的输出:
{
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"LocalId": "1",
"StateProvinceId": "SA",
"SchoolName": "Steve's School",
"Emails": [
{
"Email": "steven@email.com",
"EmailType": "prm"
},
{
"Email": "test@gmail.com",
"EmailType": "sec"
}
]
}
我如何在 Mule 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
}
@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 $
我有以下 SQL 服务器 select 查询:
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": "steven@email.com"
},
{
"StateProvinceId": "SA",
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"EmailType": "sec",
"LocalId": "1",
"SchoolName": "Steve's School",
"Email": "test@gmail.com"
}
]
但我希望通过公共元素合并它以生成所需的输出:
{
"RefId": "7FDF722B-6BBA-4BF0-8205-A5380B269EF1",
"LocalId": "1",
"StateProvinceId": "SA",
"SchoolName": "Steve's School",
"Emails": [
{
"Email": "steven@email.com",
"EmailType": "prm"
},
{
"Email": "test@gmail.com",
"EmailType": "sec"
}
]
}
我如何在 Mule 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
}
@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 $