如何在WSO2 EI中去除API响应的重复JSON集并展示唯一结果?
WSO2 EI移除JSON数组重复对象解决方案
方法一:使用Script中介(JavaScript)
直接通过JavaScript操作JSON payload,基于value字段去重,步骤如下:
- 在集成序列中添加Script中介,选择语言为
JavaScript。 - 插入以下代码实现去重逻辑:
// 读取当前消息的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的流程处理,步骤如下:
- 在序列中添加Property中介,将消息类型转为XML:
<property name="messageType" value="application/xml" scope="axis2"/>
- 添加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() < current()/position()]/value = value)])"/> </resultCount> <totalCount> <xsl:value-of select="count(fields/ApplicationNumber/listItems/jsonObject[not(../jsonObject[position() < current()/position()]/value = value)])"/> </totalCount> </message> <!-- 处理ApplicationNumber的去重 --> <fields> <ApplicationNumber> <listItems> <xsl:for-each select="fields/ApplicationNumber/listItems/jsonObject"> <xsl:if test="not(../jsonObject[position() < current()/position()]/value = value)"> <xsl:copy-of select="."/> </xsl:if> </xsl:for-each> </listItems> </ApplicationNumber> </fields> </jsonObject> </xsl:template> </xsl:stylesheet>
- 添加Property中介,将消息类型转回JSON:
<property name="messageType" value="application/json" scope="axis2"/>
注意事项
- 两种方法均基于
value字段判断重复,若text和value可能不一致,可调整判断逻辑同时校验两个字段。 - 若API响应结构有变化,需对应调整代码中的JSON路径或XSLT匹配规则。
内容的提问来源于stack exchange,提问作者Mehrnoosh
相关产品推荐
相关产品推荐

