2017-01-07 4 views
0

Hallo Ich habe einen 1 json wie unten, wie zwei Json fusionieren, basierend auf Schlüsselwert in Mule

"first": [ 
{ 
    "projectid": "15", 
    "approval_status": "A" 
}, 
{ 
    "projectid": "24", 
    "approval_status": "A" 
} ]} 

Die nächste Nutzlast speichert in einem flowVariable

{ 
"Second": [ 
{ 
    "projectid": "15", 
    "total": "123", 
    "updated": "yes" 
}, 
    { 
    "projectid": "24", 
    "total": "123", 
    "updated": "yes" 
}]} 

Am datawevae mit diesen verschmelzen Nutzlast aber es ist nicht zu erwarten Geben führt meinen Erwartungswert

{ 
"Result": [ 
{ 
    "projectid": "15", 
    "total": "123", 
    "approval_status": "A" 
}, 
    { 
    "projectid": "24", 
    "total": "123", 
    "approval_status": "A" 
}]} 

Antwort

-1

Edited Antwort ist Jetzt wird es fi Filter dynamisch basierend auf Ihrer ID.

     %dw 1.0 
 
%output application/json 
 
%var json1 = {"first": [{ "projectid": "15", "approval_status": "A"},{ "projectid": "24", "approval_status": "A"} ]} 
 
%var json2 = { "Second": [{ "projectid": "15", "total": "123", "updated": "yes"}, { "projectid": "24", "total": "123", "updated": "yes"}]} 
 
--- 
 

 
Result: (using(json2Group = json2.Second groupBy $.projectid) (json1.first filter (json2Group[$.projectid] != null) map (($ ++ json2Group[$.projectid][0])) distinctBy $ ) )

+0

Der Eingang und der Ausgang sein müssen basierend auf Schlüssel zugeordnet und es wird dynamisch sein. –

+0

Ich habe meine Antwort bearbeitet ... Kannst du es versuchen? Es wird dynamische IDs jetzt nehmen und auf ihnen basierend filtern – srbhvatsa

0

Ich bin nicht sicher, wie sind Sie sowohl die Nutzlasten zugleich

bekommen Aber wenn Sie sind in der Lage, sowohl die Nutzlast und in der Lage zu speichern in zwei Strömungs-Variablen zu erhalten Dann können Sie einen Expressionstransformator verwenden, um Ihre kombinierte Nutzlast zu konstruieren.
Unten ist ein Beispiel können Sie versuchen, dynamisch sowohl die Nutzlast zu kombinieren: -

 <set-payload value="{ 
    &quot;first&quot;: [{ 
     &quot;projectid&quot;: &quot;15&quot;, 
     &quot;approval_status&quot;: &quot;A&quot; 
    }, { 
     &quot;projectid&quot;: &quot;24&quot;, 
     &quot;approval_status&quot;: &quot;A&quot; 
    }] 
    }" mimeType="application/json" doc:name="Set Payload"/> 
     <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/> 
     <set-variable variableName="var1" value="#[message.payload]" doc:name="Variable"/> 

     <set-payload value="{ 
    &quot;Second&quot;: [{ 
     &quot;projectid&quot;: &quot;15&quot;, 
     &quot;total&quot;: &quot;123&quot;, 
     &quot;updated&quot;: &quot;yes&quot; 
    }, { 
     &quot;projectid&quot;: &quot;24&quot;, 
     &quot;total&quot;: &quot;123&quot;, 
     &quot;updated&quot;: &quot;yes&quot; 
    }] 
    }" mimeType="application/json" doc:name="Set Payload"/> 
     <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/> 
     <set-variable variableName="var2" value="#[message.payload]" doc:name="Variable"/> 

     <expression-transformer 
    expression="#[[ 

    'Result':[ 
    { 
     'projectid': flowVars.var1.first[0].projectid, 
     'total': flowVars.var2.Second[0].total, 
     'approval_status': flowVars.var1.first[0].approval_status 
    }, 
    { 
    'projectid': flowVars.var1.first[1].projectid, 
    'total': flowVars.var2.Second[1].total, 
    'approval_status': flowVars.var1.first[1].approval_status 
    } 

    ]] 
     ]" doc:name="Expression"/> 
    <json:object-to-json-transformer doc:name="Object to JSON"/>  

Bitte beachten Sie, das obige Beispiel ist es, Ihnen zu zeigen, wie die Nutzlast kombinieren dynamisch und schnell.
Hier müssen Sie sowohl die Nutzlast speichern in einem Flussvariable var1 und var2, (I have used set payload just to demonstrate, you need to get it dynamically), dann können Sie die Nutzlast konstruieren dynamisch den Ausdruck Transformator
Beachten Sie auch, wenn Sie die json bekommen Payload in der exakt gleichen Struktur, können Sie den obigen Code für eine schnelle Kombination von Payloads verwenden ...
Aber, wenn Ihre JSON-Struktur Änderungen sagen ein weiteres Listenelement in Ihrer Nutzlast enthalten, dann müssen Sie den obigen Code ändern und Verwenden Sie eine for-Schleife, um die Werte zu erhalten.

Der obige Code wird eine schnelle kombinierte Nutzlast produzieren wie folgt: -

{ 
    "Result": [ 
    { 
     "total": "123", 
     "projectid": "15", 
     "approval_status": "A" 
    }, 
    { 
     "total": "123", 
     "projectid": "24", 
     "approval_status": "A" 
    } 
    ] 
} 
+0

Bin die Nutzlast eins nach dem anderen bekommen und in einer Variablen speichern. Ihre Payload-Struktur wird mehr Daten haben und beide werden nicht in der gleichen Reihenfolge sein –

+0

Sie müssen die ändern über Code, müssen Sie eine für jeden und String-Puffer verwenden, um jeden Wert zu speichern und den kombinierten Wert am Ende zu drucken. Die obige Lösung ist für eine schnelle Kombination wie die Daten, die Sie erwähnt haben :) –

+0

Kannst du mir etwas vorschlagen mit Filter in Dataweave –

Verwandte Themen