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
で、それは文字列でありながらItemResponse
でlineIdentifier
は、数あるので、completedLines
でas :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
こんにちはYevgeniy、ありがとうございました。 { "ルート":{ "foo" という:[ 10、]、 "createItem":{ "itemInfo":{ "行":[ 以下は、私が取得していますという応答があります] } } } }内部フィルタが必要なデータを取得していないようです。 – ROA
あなたの入力データは、最初の質問とは異なって見えると思います。おそらくlineIdentifierは文字列ではなく数字です。次に 'as:string'を削除する必要があります。ところで、私はfooを削除するのを忘れました:) – Yevgeniy
こんにちはYevgeniy、Sorry.Theyは文字列です。それでも動作しません。すべてのポインタ? – ROA