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

WSO2:使用Payload Factory将JSON/XML转为制表符CSV并换行写入

解决Iterate循环生成多行CSV的问题

核心思路

每次迭代生成带换行符的单行数据,再通过属性累加或聚合拼接所有行,最终输出完整的多行CSV。

步骤1:在Payload Factory中生成带换行的单行数据

在Payload Factory里,为每条生成的记录末尾添加换行符(XML中用
表示),制表符用	表示。示例配置:

<payloadFactory media-type="text">
    <format>$1&#09;$2&#09;$3&#10;</format>
    <args>
        <arg evaluator="json" expression="$.id"/>
        <arg evaluator="json" expression="$.name"/>
        <arg evaluator="json" expression="$.email"/>
    </args>
</payloadFactory>

这样每次迭代输出的都是字段1\t字段2\t字段3\n格式的单行字符串。

步骤2:用属性累加所有行数据

  1. 先初始化一个空属性存储CSV内容:
<property name="csvContent" scope="default" type="STRING" value=""/>
  1. 在Iterate循环内部,用Script中介(JavaScript)将当前行追加到属性中:
<script language="js"><![CDATA[
    // 获取当前迭代生成的单行数据
    var currentLine = mc.getPayload();
    // 获取已有的CSV内容
    var existingContent = mc.getProperty("csvContent");
    // 追加新行并更新属性
    mc.setProperty("csvContent", existingContent + currentLine);
]]></script>
  1. Iterate配置需设置preservePayload="false",确保每次迭代的payload是当前生成的行数据。

步骤3:输出最终CSV内容

Iterate循环结束后,将累加好的属性值设为最终payload,再写入文件:

<payloadFactory media-type="text">
    <format>$1</format>
    <args>
        <arg evaluator="xml" expression="$ctx:csvContent"/>
    </args>
</payloadFactory>
<!-- 后续添加文件写入逻辑,如VFS中介 -->

可选:去除末尾多余换行符

如果担心最后一行多一个换行,可在输出前用Script处理:

<script language="js"><![CDATA[
    var csv = mc.getProperty("csvContent");
    if (csv && csv.endsWith("\n")) {
        csv = csv.substring(0, csv.length - 1);
        mc.setProperty("csvContent", csv);
    }
]]></script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:20:18