2017-08-02 28 views
0

我有以下json,我试图提取手机数组的某些元素。我并不总是得到2个元素,它可能是1,2或3mule dataweave从json数组中提取元素

{ 
"phones": [{ 
     "id": 123, 
     "phoneType": "H", 
     "phoneNumber": "2125551212", 
     "countryCode": "1", 
     "isCellPhone": false, 
     "optInTexting": false 
    }, { 
     "id": 456, 
     "phoneType": "W", 
     "phoneNumber": "9197776262", 
     "countryCode": "1", 
     "isCellPhone": true, 
     "optInTexting": true 
    } 
] 

}

这是我与输出:

%output application/java 
--- 
{ 
    HOMEPH: payload.phones filter ($.phoneType == "H") map {HOMEPH:.phoneNumber}, 
    WORKPH: payload.phones filter ($.phoneType == "W") map {WORKPH:$.phoneNumber} 
} 

结果我从这个获得:

​​

我想要什么:

HOMEPH: "2125551212", 
WORKPH: "9197776262" 

回答

2

尝试以下方法

%output application/java 
--- 
{ 
    HOMEPH: (payload.phones filter ($.phoneType == "H") map ($.phoneNumber)) [0], 
    WORKPH: (payload.phones filter ($.phoneType == "W") map ($.phoneNumber)) [0] 
} 

或者

%output application/java 
%var phoneLookup = {(payload.phones map { 
    ($.phoneType) : $ 
})} 
--- 
{ 
    HOMEPH: phoneLookup["H"].phoneNumber, 
    WORKPH: phoneLookup["W"].phoneNumber 
} 

第二个选择是因为它的迭代一次有效载荷更有效。 希望这有助于。

+0

这就是我正在寻找的。由于我过滤到数组中的一个元素,我想要这个单一的元素[0],它拉我所需要的。谢谢一堆。 – techRunner

1

由于您使用的输出application/java,你可以尝试以下操作:

%dw 1.0 
%output application/java 
--- 
{ 
    (payload.phones filter ($.phoneType == "H") map {HOMEPH:$.phoneNumber}), 
    (payload.phones filter ($.phoneType == "W") map {WORKPH:$.phoneNumber}) 
} 

你会得到输出如下:如果您Dataweave后添加对象的字符串变压器 enter image description here

,你会得到:

{HOMEPH=2125551212, WORKPH=9197776262}