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

如何使用DataWeave过滤数组对象并按条件提取签署项数据?

需求与实现方案

现有数据

原始JSON数组如下:

{
  "documentToSigner": [
    {
      "documentName": "ESRA 适用于 aa aa",
      "typeCd": "SIGNATURE",
      "subtypeCd": "CAPTURE",
      "eSignLiveExtension": {
        "extractInd": true
      },
      "documentItemName": "Signature001"
    },
    {
      "documentName": "ODP 协议",
      "typeCd": "SIGNATURE",
      "subtypeCd": "CAPTURE",
      "eSignLiveExtension": {
        "extractInd": true
      },
      "documentItemName": "Signature002"
    },
    {
      "documentName": "ODP 协议",
      "typeCd": "INPUT",
      "subtypeCd": "LABEL",
      "eSignLiveExtension": {
        "extractInd": true,
        "autoFieldBindingCd": "{approval.signed}"
      },
      "documentItemName": "SignatureDate002"
    }
  ]
}

核心需求

结合另一个包含key和contentVersion字段的JSON变量,过滤出原始数组中与这两个字段匹配的项,再按documentName分组,生成包含documentItemToSigner数组的目标结构。

示例

匹配参数

  • 目标key:aAuDQ0000004mX60AI
  • 目标contentVersion:068DQ000000lK0iYAE

期望输出

[
  {
    "documentName": "ESRA 适用于 cc cc",
    "documentItemToSigner": [
      {
        "typeCd": "SIGNATURE",
        "subtypeCd": "CAPTURE",
        "eSignLiveExtension": {
          "extractInd": true
        },
        "documentItemName": "Signature001"
      }
    ]
  },
  {
    "documentName": "ODP 协议",
    "documentItemToSigner": [
      {
        "typeCd": "SIGNATURE",
        "subtypeCd": "CAPTURE",
        "eSignLiveExtension": {
          "extractInd": true
        },
        "documentItemName": "Signature004"
      },
      {
        "typeCd": "INPUT",
        "subtypeCd": "LABEL",
        "eSignLiveExtension": {
          "extractInd": true,
          "autoFieldBindingCd": "{approval.signed}"
        },
        "documentItemName": "SignatureDate004"
      }
    ]
  }
]

实现代码(JavaScript)

// 原始数据(需确保每个项包含key和contentVersion字段)
const originalData = {
  "documentToSigner": [
    {
      "documentName": "ESRA 适用于 aa aa",
      "typeCd": "SIGNATURE",
      "subtypeCd": "CAPTURE",
      "eSignLiveExtension": {
        "extractInd": true
      },
      "documentItemName": "Signature001",
      "key": "aAuDQ0000004mX60AI",
      "contentVersion": "068DQ000000lK0iYAE"
    },
    {
      "documentName": "ODP 协议",
      "typeCd": "SIGNATURE",
      "subtypeCd": "CAPTURE",
      "eSignLiveExtension": {
        "extractInd": true
      },
      "documentItemName": "Signature002",
      "key": "aAuDQ0000004mX60AI",
      "contentVersion": "068DQ000000lK0iYAE"
    },
    {
      "documentName": "ODP 协议",
      "typeCd": "INPUT",
      "subtypeCd": "LABEL",
      "eSignLiveExtension": {
        "extractInd": true,
        "autoFieldBindingCd": "{approval.signed}"
      },
      "documentItemName": "SignatureDate002",
      "key": "aAuDQ0000004mX60AI",
      "contentVersion": "068DQ000000lK0iYAE"
    }
  ]
};

// 目标匹配参数
const targetKey = "aAuDQ0000004mX60AI";
const targetContentVersion = "068DQ000000lK0iYAE";

// 1. 过滤出匹配key和contentVersion的项
const matchedItems = originalData.documentToSigner.filter(item => 
  item.key === targetKey && item.contentVersion === targetContentVersion
);

// 2. 按documentName分组,生成目标结构
const result = Object.values(matchedItems.reduce((groupedData, item) => {
  const { documentName, ...itemDetails } = item;
  if (!groupedData[documentName]) {
    groupedData[documentName] = {
      documentName,
      documentItemToSigner: []
    };
  }
  groupedData[documentName].documentItemToSigner.push(itemDetails);
  return groupedData;
}, {}));

console.log(JSON.stringify(result, null, 2));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:17:14