2017-01-07 6 views
0

Salut, j'ai 1 JSON comme ci-dessouscomment fusionner deux JSON basée sur la valeur clé dans Mule

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

La charge utile suivante est stocke dans une flowVariable

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

Am en utilisant datawevae de fusionner ces charge utile, mais sa ne pas donner le résultat attendu ma valeur attendue est

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

Répondre

-1

Edité réponse maintenant, il fi ltre basé dynamiquement sur votre identifiant.

     %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

L'entrée et la sortie doivent être mappé basé sur la clé et il sera dynamique. –

+0

J'ai édité ma réponse ... Pouvez-vous essayer avec ça. Il faudra maintenant prendre des identifiants dynamiques et les filtrer en fonction de ceux-ci. – srbhvatsa

0

Je ne sais pas comment vous obtenez les deux charges utiles en même temps

Mais si vous êtes en mesure d'obtenir la charge utile et capable d'enregistrer en 2 variables de flux , alors vous pouvez utiliser un Transformateur d'expression pour construire votre charge utile combinée.
Voici un exemple que vous pouvez essayer de combiner à la fois la charge utile dynamique: -

 <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"/>  

S'il vous plaît noter, l'exemple ci-dessus est juste pour montrer comment vous pouvez combiner la charge utile dynamiquement et rapidement.
Ici, vous devez stocker la charge utile dans une variable flux var1 et var2, (I have used set payload just to demonstrate, you need to get it dynamically), vous pouvez construire la charge utile dynamiquement à l'aide du transformateur d'expression
Notez également, si vous obtenez le JSON charge utile dans la même structure, vous pouvez utiliser le code ci-dessus pour une combinaison rapide de charges utiles ...
Mais, si votre structure json change un élément de liste supplémentaire inclus dans votre charge, alors vous devez modifier le code ci-dessus et utilisez une boucle for pour obtenir les valeurs.

Le code ci-dessus produira une charge utile combinée rapide comme suit: -

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

Je récupère les données utiles une par une et les stocke dans une variable. Leur structure de charge utile aura plus de données et les deux ne seront pas dans le même ordre –

+0

Vous devez modifier le code ci-dessus, besoin d'utiliser un pour chaque tampon String pour stocker chaque valeur et pour imprimer la valeur combinée à la fin. La solution ci-dessus est pour une combinaison rapide selon les données que vous avez mentionnées :) –

+0

Pouvez-vous me suggérer quelque chose en utilisant le filtre dans dataweave –