You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataWeave 2.0中基于apiId键合并JSON对象

使用DataWeave 2.0基于apiId合并JSON数组

需求说明

原始JSON结构:

[{
  "apiId": 18211158,
  "policyName0": "cors"
}, {
  "apiId": 18211158,
  "policyName1": "client-id-enforcement"
}, {
  "apiId": 18211150,
  "policyName0": "client-id-enforcement"
}, {
  "apiId": 18211162,
  "policyName0": "client-id-enforcement"
}, {
  "apiId": 18211162,
  "policyName1": "cors"
}, {
  "apiId": 18211162,
  "policyName2": "oauth"
}]

需要将其转换为按apiId合并后的结构,把同一apiId对应的所有policyName属性合并到同一个对象中:

[{
  "apiId": 18211158,
  "policyName0": "cors",
  "policyName1": "client-id-enforcement"
}, {
  "apiId": 18211150,
  "policyName0": "client-id-enforcement"
}, {
  "apiId": 18211162,
  "policyName0": "client-id-enforcement",
  "policyName1": "cors",
  "policyName2": "oAuth"
}]

解决方案代码

基础合并版本

%dw 2.0
output application/json
---
payload groupBy ($.apiId) 
    mapObject ((value, key) -> {
        apiId: key,
        (value flatMap ((item) -> item - "apiId"))
    })
    pluck $

包含大小写修正的版本

如果需要把oauth统一修正为oAuth,可以使用下面的代码:

%dw 2.0
output application/json
---
payload groupBy ($.apiId) 
    mapObject ((value, key) -> {
        apiId: key,
        (value flatMap ((item) -> 
            item - "apiId" mapObject ((val, k) -> 
                (k): if (val == "oauth") then "oAuth" else val
            )
        ))
    })
    pluck $

代码解释

  1. 分组归类:groupBy ($.apiId)将原始数组按apiId分组,生成一个以apiId为键、对应同ID所有条目组成的数组为值的对象。
  2. 合并属性:通过mapObject遍历每个分组,先保留apiId字段,再用flatMap把分组内每个条目去掉apiId后,将所有policyName属性扁平合并到同一个对象中。
  3. 转回数组:最后用pluck $把处理后的对象转换为数组结构,得到最终的合并结果。

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:15:41