2017-02-11 2 views
0

Ich möchte folgende Ausgabe (json) angezeigt werden, sind die Eingabe von PL/SQL-Cursor, meine Fragen:Anzeige verschachtelt Sammlung mit dataweave

  1. wie diese Ausgabe angezeigt werden?
  2. welche Art von Eingabe erwartet, um diese Ausgabe zu haben?
  3. wie 2 Cursor Ergebnisse zu kombinieren, indem personId Schlüssel?

Danke

Eingang:

personCursor: 
[{personName=a,personId=1}, {personName=b,personId=2}] 
*contactCursor* 
[{personId=1, firstName==x, phone=123}, {personId=1, firstName==y, phone=234}, {personId=2, firstName==z, phone=345},{personId=2, firstName==w, phone=456}] 
**output:** 
[ 
    { 
    "personName": "a", 
    "personId": "1", 
    "contacts": 
      [ 
       { 
        "firstname": "x", 
        "phone": 123 
       }, 
       { 
        "firstname": "y", 
        "phone": 234 
       }, 
      ] 
    }, 
{ 
    "personName": "b", 
    "personId": "2", 
    "contacts": 
      [ 
       { 
        "firstname": "z", 
        "phone": 345 
       }, 
       { 
        "lastname": "w", 
        "phone": 456 
       }, 
      ] 
    } 
] 

Antwort

0

Für die Ausgabe bekommen Sie Skript so etwas wie

%dw 1.0 
%output application/json 
%var contactLookup = payload groupBy $.personId 
--- 
flowVars.PersonCursor map { 
    ($), 
    contacts : contactLookup[$.personId] 
} 

Wo Nutzlast ist contactCursor und flowVars.PersonCursor ist personCursor verwenden. Der angegebene Code kombiniert Daten mithilfe der Hashmap-Suche. Die Eingabe erfolgt im Fall von pl/sql cursor java.

HTH

+0

, welche Art von Datentyp: Sollte unten etwas auf den Linien sein? Ich habe beide als json, es funktioniert nur für die 1. PersonCursor Aufzeichnung, erhalten folgende Ausgabe: { "output": [ { "personname": "a", "PersonId": 1, "Kontakte": [ { "PersonId": 1, "firstname": "x" "phone": 123 }, { "PersonId": 1, "firstname": "y" "phone": 234 } ] }, { "PersonName": "b", "PersonId": 2, "Kontakte": null } ] } – Lei

+0

Json sowie Java ist in Ordnung. Wenn Sie jedoch eine Antwort erhalten, ändert Iterator den Code wie folgt:% var contactLookup = Nutzlastmap $ groupBy $ .personId' – AnupamBhusari

0

Der andere Weg, dies unter Verwendung von 2 Karte Operatoren und Looping obwohl die Arrays und die Konstruktion des Ausgang Json zusammen mit Filterbedingung tun können, um die Kontakte zu richtigen Person zuordnen. für contactCursor und flowVars.PersonCursor

PersonCursor map(v1,i1) { 
    personName": $.personName, 
    "personId": $.personId, 
    contacts : contactCursor map { 
"firstname": $.firstname, 
"phone": $.phone 
      } filter $.personId == v1.personId 
}