2017-08-02 18 views
0

私は以下のjsonを持っています。私は電話配列の特定の要素を抽出しようとしています。私は常に2つの要素を取得しない、それは1,2、または3jsonの配列からデータを抽出します。

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

結果、私はこのことから得る:

​​

私が欲しいもの:

あなたは application/javaとして出力を使用しているので、あなたが次のことを試すことができ
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 
} 

2番目のオプションは、それが一度あなたのペイロードを反復して、より効率的です。 これが役立つことを願っています。

+0

これは私が探していたものです。私は配列の1つの要素にフィルタをかけ、その要素[0]を1つだけ必要とするので、必要なものを引き出します。本当にありがとう。 – techRunner

1

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

あなたは以下のように出力が得られます: enter image description here

あなたはDataweave後の文字列トランスにオブジェクトを追加する場合、必要になります取得:

{HOMEPH=2125551212, WORKPH=9197776262} 
関連する問題