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

如何在WSO2 EI中去除API响应的重复JSON集并展示唯一结果?

WSO2 EI移除JSON数组重复对象解决方案

方法一:使用Script中介(JavaScript)

直接通过JavaScript操作JSON payload,基于value字段去重,步骤如下:

  1. 在集成序列中添加Script中介,选择语言为JavaScript。
  2. 插入以下代码实现去重逻辑:
// 读取当前消息的JSON payload
var payload = JSON.parse(mc.getPayloadJSON());
var listItems = payload.fields.ApplicationNumber.listItems;

// 利用对象记录已出现的value,过滤重复项
var uniqueItems = [];
var seenValues = {};

for (var i = 0; i < listItems.length; i++) {
    var item = listItems[i];
    if (!seenValues[item.value]) {
        seenValues[item.value] = true;
        uniqueItems.push(item);
    }
}

// 更新去重后的数组
payload.fields.ApplicationNumber.listItems = uniqueItems;
// 同步更新结果计数
payload.message.resultCount = uniqueItems.length;
payload.message.totalCount = uniqueItems.length;

// 将处理后的payload写回消息上下文
mc.setPayloadJSON(payload);

方法二:使用XSLT中介

通过JSON转XML、XSLT去重、XML转JSON的流程处理,步骤如下:

  1. 在序列中添加Property中介,将消息类型转为XML:
<property name="messageType" value="application/xml" scope="axis2"/>
  1. 添加XSLT中介,引用以下XSLT模板(实现去重并更新计数):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/jsonObject">
        <jsonObject>
            <!-- 保留状态和时间戳,更新计数 -->
            <message>
                <xsl:copy-of select="message/status"/>
                <xsl:copy-of select="message/timestamp"/>
                <resultCount>
                    <xsl:value-of select="count(fields/ApplicationNumber/listItems/jsonObject[not(../jsonObject[position() &lt; current()/position()]/value = value)])"/>
                </resultCount>
                <totalCount>
                    <xsl:value-of select="count(fields/ApplicationNumber/listItems/jsonObject[not(../jsonObject[position() &lt; current()/position()]/value = value)])"/>
                </totalCount>
            </message>
            <!-- 处理ApplicationNumber的去重 -->
            <fields>
                <ApplicationNumber>
                    <listItems>
                        <xsl:for-each select="fields/ApplicationNumber/listItems/jsonObject">
                            <xsl:if test="not(../jsonObject[position() &lt; current()/position()]/value = value)">
                                <xsl:copy-of select="."/>
                            </xsl:if>
                        </xsl:for-each>
                    </listItems>
                </ApplicationNumber>
            </fields>
        </jsonObject>
    </xsl:template>
</xsl:stylesheet>
  1. 添加Property中介,将消息类型转回JSON:
<property name="messageType" value="application/json" scope="axis2"/>

注意事项

  • 两种方法均基于value字段判断重复,若text和value可能不一致,可调整判断逻辑同时校验两个字段。
  • 若API响应结构有变化,需对应调整代码中的JSON路径或XSLT匹配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:53:13