问题
I am having a JSON like this :
{
"dcsId": "1184001100000000517",
"marketCode": "US",
"languageCode": "en-US",
"profile": {
"base": {
"username": "arunima27",
"activeInd": "R",
"phone": [
{
"activeInd": "Y",
"type": "mobile",
"primaryInd": "Y",
"number": "2234566788"
},
{
"activeInd": "N",
"type": "mobile",
"primaryInd": "N",
"number": ""
}
]
}
}
}
From this input JSON we need to extract the payload.profile.base.phone.number where the payload.profile.base.phone.type == "mobile" and payload.profile.base.phone.activeInd == "Y". Actually we need to loop through the JSON array (payload.profile.base.*phone) and get only the phone numbers which are active and having the category / type as mobile.
We need the output like below :
{
"dcsId": "1184001100000000517",
"marketCode": "US",
"languageCode": "en-US",
"username" : "arunima27",
"phoneNumber" : "2234566788"
}
We are facing problem in doing this transformation for the "phoneNumber" output variable.
回答1:
from your expected result it looks like you only want the first matching number. here is the dataweave doing exactly this:
%dw 1.0
%output application/json
---
{
dcsid: payload.dcsId,
markCode: payload.marketCode,
languageCode: payload.languageCode,
username: payload.profile.base.username,
phoneNumber: (payload.profile.base.phone filter ($.activeInd == 'Y' and $.type == 'mobile'))[0].number
}
if you want all matching phone numbers, just leave the [0]
out and the value of phoneNumber
in the result will be a array (not just the first matching phone number).
回答2:
This has solved the problem.
{(payload.profile.base.phone filter ($.activeInd == "Y" and $.primaryInd== "Y"))}.number default ""
回答3:
Use filter and map on phone to achieve the desired result.
phoneNumber: {
(payload.profile.base.phone filter ($.activeInd == "Y" and $.type == "mobile") map {
number: $.number
}
)}
Output
"phoneNumber": {
"number": "2234566788",
}
来源:https://stackoverflow.com/questions/43487855/how-to-filter-an-array-of-json-in-mule-dataweave