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

DataWeave Map函数无法获取数组值,如何实现JSON转换需求?

问题:过滤空bea_order项并合并转换数组元素

需求:处理JSON输入,过滤掉bea_order为空数组的对象,提取所有非空bea_order内的元素并合并,转换为指定格式的输出。

输入示例

[
   {
      "bea_order":[
         
      ]
   },
   {
      "bea_order":[
         {
            "PO_Receipt_Date__c":"2021-08-13",
            "Id":"a3I1T000003E6SQUA0"
         },
         {
            "PO_Receipt_Date__c":null,
            "Id":"a3Iq0000000OhnREAS"
         },
         {
            "PO_Receipt_Date__c":null,
            "Id":"a3Iq0000000OhnWEAS"
         }
      ]
   },
   {
      "bea_order":[
         {
            "PO_Receipt_Date__c":"2022-05-06",
            "Id":"a3I1T000003E6SOUA0"
         }
      ]
   },
   {
      "bea_order":[
         
      ]
   }
]

预期输出

[
   {
      "id":"a3I1T000003E6SQUA0",
      "flag":"false"
   },
   {
      "id":"a3Iq0000000OhnREAS",
      "flag":"false"
   },
   {
      "id":"a3Iq0000000OhnWEAS",
      "flag":"false"
   },
   {
      "id":"a3I1T000003E6SOUA0",
      "flag":"false"
   }
]

尝试的错误代码

%dw 2.0
output application/json
---
payload.bea_order filter ($.Id != null) map () -> {
    id : $.Id,
    flag : 'false'
}

修正后的解决方案

原代码的问题在于:直接取payload.bea_order会得到数组的数组,且未先过滤空bea_order的对象,也没有展开嵌套数组。以下是修正后的DataWeave代码:

%dw 2.0
output application/json
---
payload 
    // 过滤掉bea_order为空的对象
    filter (sizeOf($.bea_order) > 0)
    // 展开所有bea_order数组,合并为单个数组
    flatMap ($.bea_order)
    // 可选:过滤掉Id为空的元素
    filter ($.Id != null)
    // 转换为目标格式
    map {
        id: $.Id,
        flag: "false"
    }

代码说明

  1. 过滤空bea_order对象:通过filter (sizeOf($.bea_order) > 0)排除所有bea_order为空数组的项。
  2. 展开嵌套数组:flatMap ($.bea_order)将多个独立的bea_order数组展开合并成一维数组,避免嵌套结构。
  3. 元素格式转换:用map将原元素的Id字段转为小写的id,并添加固定值flag: "false";保留filter ($.Id != null)可确保只处理含有效Id的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:15:36