使用Dataweave将两个JSON输出合并为一个

时间:2017-05-04 19:31:27

标签: mule mule-studio anypoint-studio dataweave

我目前有两个带数据的JSON文件。

第一个包含用户的操作列表。但是,userID是UID字符串而不是其用户名。

第二个是UID字符串的JSON列表及其相应的用户名。我将此JSON存储在名为UserPayload

的流变量中

我想将用户名合并到第一个列表中,以便我的输出具有实际的用户名而不是UID。

这是我到目前为止所做的...但是userId部分不起作用,因为我的flowVar是一个列表。 UserPayload FlowVar

%dw 1.0
%output application/csv
---
payload map ((payload01, indexOfPayload01) -> {
     user: payload.01.userId,
     actions: payload01.action,
     FileName: payload01.payload.properties.name default "N/A",
     userId: flowVars.UserPayload.objectName
})

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:4)

您可以通过基于UserPayload过滤UserPayload的内容或从userId创建关联数组,从UserPayload flowVar访问正确的对象。

过滤UserPayload

%dw 1.0
%output application/json
---
payload map (action, index) -> {
    user: action.user,
    action: action.action,
    FileName: action.FileName,
    userId: (flowVars.UserPayload filter $.objectId == action.user)[0].objectName
}

关联数组

%dw 1.0
%output application/json
%var users = flowVars.UserPayload groupBy $.objectId
---
payload map (action, index) -> {
    user: action.user,
    action: action.action,
    FileName: action.FileName,
    userId: users[action.user][0].objectName
}

对于我的例子,我使用了从你的问题中得到的以下样本数据。

<强> flowVars.UserPayload

[{
    "objectId": "0000-0000-0001",
    "objectName": "first user"
}, {
    "objectId": "0000-0000-0002",
    "objectName": "second user"
}]

<强>有效载荷

[{
    "user": "0000-0000-0001",
    "action": "some crazy action",
    "FileName": "some-crazy-action.mov"
}]