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

Merge two JSON outputs into one with Dataweave

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

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

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

的流变量中

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

这是我目前所拥有的...但是 userId 部分不起作用,因为我的 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
})

如有任何帮助,我们将不胜感激。谢谢!

您可以通过根据 userId 过滤 UserPayload 的内容或从 UserPayload 创建关联数组来从 UserPayload flowVar 访问正确的对象。 =18=]

过滤 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"
}]