2016-07-22 6 views
0

Das Problem, das ich gegenüberstelle, ist mit mehreren Listen in Dataweave zu wiederholen.Wie wiederhole ich mehrere Listen innerhalb Daten weben in Mule

Eingang des dataweave -> in zwei Strömungs Zugriffe auf Variablen kommen (wie unten),

var1: [{bkAuthorID=1, bkAuthorName=abc, bookCategory=horror}, {bkAuthorID=2, bkAuthorName=xyz, bookCategory=horror}, {bkAuthorID=1, bkAuthorName=abc, bookCategory=comedy}, {bkAuthorID=2, bkAuthorName=xyz, bookCategory=Fantacy}}] 

var2: [{bkAuthorID=1, bkName=gjh, bkDescription=kjh},{bkAuthorID=1, bkName=sfs, bkDescription=kjh},{bkAuthorID=2, bkName=gjh, bkDescription=kjh},{bkAuthorID=2, bkName=gjh, bkDescription=kjh}] 

Ausgang in dataweave -> gewünschten json structue mit drei Listen wie unten.

{ 
    "books": [ 
    { 
     "bookAuthor": "abc", 
     "bookCategorys": [ 
     { 
      "bookCategory": "horror", 
      "listOfBooks": [ 
      { 
       "bookName": "xyz", 
       "bookDescription":"lmn" 
      }, 
      { 
       "bookName": "xyz", 
       "bookDescription":"lmn" 
      } 
      ] 
     }, 
     { 
      "bookCategory": "comedy", 
      "listOfBooks": [ 
      { 
       "bookName": "xyz", 
       "bookDescription":"lmn" 
      } 
      ] 
     } 
     ] 
    }, 
    { 
     "bookAuthor": "xyz", 
     "bookCategorys": [ 
     { 
      "bookCategory": "horror", 
      "listOfBooks": [ 
      { 
       "bookName": "xyz", 
       "bookDescription":"lmn" 
      } 
      ] 
     } 
     ] 
    } 
    ] 
} 

Kann jemand Hilfe für diese Dataweave-Mapping für diese Anforderung.

@Manik, können Sie mir bitte helfen.

+0

Können Sie bitte einige Details darüber, welche Art von Daten ist in var1 und var2 und was ist die Beziehung zwischen den hinzufügen? Was genau wollen Sie erreichen (zB Gruppe nach Autor und dann Kategorie)? Erhalten Sie einen Fehler, warum diese beiden Listen zusammengeführt werden? –

Antwort

0

Ich bin in der Lage, eine Beziehung zwischen var1 und var2 mit bkAuthorID herzustellen. Aber es muss eine weitere Beziehung geben, um zu sagen, welches Buch in var2 zu welcher Kategorie gehört. Daher wird jede Kategorie in der folgenden Ausgabe eine Liste aller von diesem Autor geschriebenen Bücher enthalten. Wie auch immer, alles, was Sie tun müssen, ist nur eine weitere Filterbedingung in der 'listOfBooks'-Zeile hinzuzufügen.

Dataweave Code:

%dw 1.0 
%output application/json 
--- 
{ 
    books:(flowVars.var1 groupBy $.bkAuthorName map using (authorId=$.bkAuthorID[0]) { 
     bookAuthor:$[0].bkAuthorName, 
     bookCategorys: $ groupBy $.bookCategory map { 
      bookCategory:$.bookCategory[0], 
      listOfBooks: flowVars.var2[?($.bkAuthorID == authorId)] map { 
       bookName:$.bkName, 
       bookDescription:$.bkDescription 
      } 
     } 
    }) 
} 

Ausgang:

{ 
"books": [ 
{ 
    "bookAuthor": "abc", 
    "bookCategorys": [ 
    { 
     "bookCategory": "horror", 
     "listOfBooks": [ 
     { 
      "bookName": "gjh", 
      "bookDescription": "kjh" 
     }, 
     { 
      "bookName": "sfs", 
      "bookDescription": "kjh" 
     } 
     ] 
    }, 
    { 
     "bookCategory": "comedy", 
     "listOfBooks": [ 
     { 
      "bookName": "gjh", 
      "bookDescription": "kjh" 
     }, 
     { 
      "bookName": "sfs", 
      "bookDescription": "kjh" 
     } 
     ] 
    } 
    ] 
}, 
{ 
    "bookAuthor": "xyz", 
    "bookCategorys": [ 
    { 
     "bookCategory": "horror", 
     "listOfBooks": [ 
     { 
      "bookName": "gjh", 
      "bookDescription": "kjh" 
     }, 
     { 
      "bookName": "gjh", 
      "bookDescription": "kjh" 
     } 
     ] 
    }, 
    { 
     "bookCategory": "Fantacy", 
     "listOfBooks": [ 
     { 
      "bookName": "gjh", 
      "bookDescription": "kjh" 
     }, 
     { 
      "bookName": "gjh", 
      "bookDescription": "kjh" 
     } 
     ] 
    } 
    ] 
} 
] 
}