嗨我有一个1 json,如下所示
"first": [
{
"projectid": "15",
"approval_status": "A"
},
{
"projectid": "24",
"approval_status": "A"
} ]}
下一个有效负载是存储在flowVariable
中{
"Second": [
{
"projectid": "15",
"total": "123",
"updated": "yes"
},
{
"projectid": "24",
"total": "123",
"updated": "yes"
}]}
我使用datawevae来合并这些有效负载,但是它没有给出预期的结果我的期望值是
{
"Result": [
{
"projectid": "15",
"total": "123",
"approval_status": "A"
},
{
"projectid": "24",
"total": "123",
"approval_status": "A"
}]}
答案 0 :(得分:0)
我不确定你是如何同时获得两个有效载荷的
但是,如果您能够同时获得有效负载并能够保存到2个流量变量中,那么您可以使用表达式变换器来构建组合的有效负载。
下面是一个示例,您可以尝试动态地合并两个有效负载: -
<set-payload value="{
"first": [{
"projectid": "15",
"approval_status": "A"
}, {
"projectid": "24",
"approval_status": "A"
}]
}" 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="{
"Second": [{
"projectid": "15",
"total": "123",
"updated": "yes"
}, {
"projectid": "24",
"total": "123",
"updated": "yes"
}]
}" 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"/>
请注意,上述示例仅用于说明如何将有效负载动态和快速组合在一起。
在这里,您需要将有效负载存储在流变量 var1 和 var2 ,(I have used set payload just to demonstrate, you need to get it dynamically
)中,然后您可以构建有效载荷动态使用表达式变换器
另请注意,如果您使用完全相同的结构获取json有效负载,则可以使用上面的代码快速组合有效负载...
但是,如果你的json结构更改说你的有效负载中包含了一个列表元素,那么你需要修改上面的代码并使用for循环来获取值。
上面的代码将产生一个快速组合的有效载荷,如下所示: -
{
"Result": [
{
"total": "123",
"projectid": "15",
"approval_status": "A"
},
{
"total": "123",
"projectid": "24",
"approval_status": "A"
}
]
}
答案 1 :(得分:0)
我已经在本文中明确提到了如何做到这一点
答案 2 :(得分:-1)
编辑答案 现在它将根据您的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 $ ) )
&#13;