【问题标题】:Merge two JSON outputs into one with Dataweave使用 Dataweave 将两个 JSON 输出合并为一个
【发布时间】:2017-10-03 03:11:38
【问题描述】:

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

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

第二个是 UID 字符串及其对应用户名的 JSON 列表。我将此 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
})

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

【问题讨论】:

  • 你提供的样本数据会激励更多人帮助你。
  • 好点...注意。感谢您的帮助。

标签: mule mule-studio anypoint-studio dataweave


【解决方案1】:

您可以通过基于userId 过滤UserPayload 的内容或从UserPayload 创建关联数组,从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"
}]

【讨论】:

  • 关联数组对我有用。另一个没有。感谢您的帮助!
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多