如何在Mule DataWeave中过滤JSON数组

Moh*_*tra 4 mule dataweave

我有这样的JSON:

{
  "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": ""
       }
      ]
    }
  }
 }
Run Code Online (Sandbox Code Playgroud)

从这个输入JSON我们需要提取payload.profile.base.phone.number,其中payload.profile.base.phone.type =="mobile"和payload.profile.base.phone.activeInd =="Y".实际上,我们需要循环遍历JSON数组(payload.profile.base.*phone)并仅获取活动且类别/类型为mobile的电话号码.

我们需要如下输出:

{
  "dcsId": "1184001100000000517",
  "marketCode": "US",
  "languageCode": "en-US",
  "username" :  "arunima27", 
  "phoneNumber" : "2234566788"
}  
Run Code Online (Sandbox Code Playgroud)

我们在为"phoneNumber"输出变量进行此转换时遇到问题.

Yev*_*niy 7

从您的预期结果看起来您只想要第一个匹配的数字.这是dataweave正是这样做的:

%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
}
Run Code Online (Sandbox Code Playgroud)

如果你想要所有匹配的电话号码,只需离开,[0]结果中的值phoneNumber将是一个数组(而不仅仅是第一个匹配的电话号码).