2017-04-19 15 views
2

我有一個JSON這樣的:如何篩選JSON數組在騾子DataWeave

{ 
    "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": "" 
     } 
     ] 
    } 
    } 
} 

從這個輸入JSON我們需要提取payload.profile.base.phone.number,其中有效載荷。 profile.base.phone.type ==「mobile」和payload.profile.base.phone.activeInd ==「Y」。實際上,我們需要循環訪問JSON數組(payload.profile.base。* phone),並只獲取活動的電話號碼,並將類別/類型設置爲移動電話號碼。

我們需要輸出象下面這樣:

{ 
    "dcsId": "1184001100000000517", 
    "marketCode": "US", 
    "languageCode": "en-US", 
    "username" : "arunima27", 
    "phoneNumber" : "2234566788" 
} 

我們在做這個轉變爲「phoneNumber的」輸出變量面臨的問題。

回答

2

這解決了這個問題。

{(payload.profile.base.phone過濾器($ .activeInd == 「Y」 和$ .primaryInd == 「Y」))}。許多默認 「」

3

從您預期的結果,它看起來就像你只想要第一個匹配的號碼一樣。這裏是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 
} 

如果你希望所有匹配的電話號碼,只留下在結果[0]出來的phoneNumber值將是一個數組(而不只是第一個匹配的電話號碼)。

0

使用過濾器地圖在手機上實現所需的結果。

phoneNumber: { 
    (payload.profile.base.phone filter ($.activeInd == "Y" and $.type == "mobile") map { 
     number: $.number 
    } 
)} 

輸出

"phoneNumber": { 
    "number": "2234566788", 
} 
+0

不,phoneNumber的不會是一個數組。如果有多個匹配的電話號碼,您的數據編織將產生無效的JSON。 phoneNumber將是一個包含屬性的對象,其中包含鍵'number' – Yevgeniy

+0

是的,忘記檢查了。感謝您將它帶到我的通知中.. – Abhay