2017-03-21 11 views
1

Dataweaveのペイロードで同じレベルのオブジェクト値をフィルタリングしようとしています。ループスルーできましたが、期待される出力が得られません。 サンプルペイロード:ループデータ織りで同じレベルのオブジェクト値をフィルタリングする - Mule 3.7

{ 
    "root": { 
     "createItem": { 
      "itemInfo": { 
       "lines": [{ 
        "lineIdentifier": "4", 
        "Attributes": "Test1", 
        "partNumber": "QZRB" 
       }, { 
        "lineIdentifier": "10", 
        "Attributes": "Test3", 
        "partNumber": "QPR1" 
       }, { 
        "lineIdentifier": "12", 
        "Attributes": "Test4", 
        "partNumber": "QHT2" 
       }] 
      } 
     }, 
     "ItemResponse": { 
      "lines": [{ 
       "lineIdentifier": 4, 
       "itemName": "QZRB", 
       "status": "FAILED" 
      }, { 
       "lineIdentifier": 10, 
       "itemName": "QPR1", 
       "status": "COMPLETE" 
      }, { 
       "lineIdentifier": 12, 
       "itemName": "QHT2", 
       "status": "COMPLETE" 
      }] 
     } 
    } 
} 

予想される出力:

{ 
    "root": { 
     "createItem": { 
      "itemInfo": { 
       "lines": [ { 
        "lineIdentifier": "10", 
        "Attributes": "Test3", 
        "partNumber": "QPR1" 
       }, { 
        "lineIdentifier": "12", 
        "Attributes": "Test4", 
        "partNumber": "QHT2" 
       }] 
      } 
     } 
    } 
} 

は、ここで私がやっているものです:

{ 
    root: { 
     (payload.root.createItem.itemInfo.lines map ((respLines, indexOfRespLines) -> { 
     items:payload.root.ItemResponse.lines filter ($.itemName == respLines.partNumber and $.status =='COMPLETE') map 
     { 
      item: $.itemName, 
     attributes: respLines.Attributes 
     } 

     } 

     ) 
     ) 
    } 
} 

どのように私はこれを達成できますか? itemInfoで、それは文字列でありながらItemResponselineIdentifierは、数あるので、completedLinesas :string

%dw 1.0 
%output application/json 
%var completedLines = payload.root.ItemResponse.lines filter $.status == 'COMPLETE' map $.lineIdentifier as :string 
--- 
{ 
    root: { 
     createItem: { 
      itemInfo: { 
       lines: payload.root.createItem.itemInfo.lines filter (completedLines contains $.lineIdentifier) 
      } 
     } 
    } 
} 

注意を払う:

おかげで、 ROA

答えて

0

はこれを試してみてください。

+0

こんにちはYevgeniy、ありがとうございました。 { "ルート":{ "foo" という:[ 10、]、 "createItem":{ "itemInfo":{ "行":[ 以下は、私が取得していますという応答があります] } } } }内部フィルタが必要なデータを取得していないようです。 – ROA

+0

あなたの入力データは、最初の質問とは異なって見えると思います。おそらくlineIdentifierは文字列ではなく数字です。次に 'as:string'を削除する必要があります。ところで、私はfooを削除するのを忘れました:) – Yevgeniy

+0

こんにちはYevgeniy、Sorry.Theyは文字列です。それでも動作しません。すべてのポインタ? – ROA

関連する問題