WSO2 MI 410中csvModule转JSON到CSV报错的替代方案求助
解决WSO2 MI csvModule转换单个JSON对象为CSV的报错问题
WSO2 MI的csvModule默认要求输入是JSON数组(因为CSV是多行数据结构,数组中的每个对象对应一行),所以直接传入单个JSON对象(如{"Name": "ABC","Age":25})会触发not a valid Json Array错误。以下是两种可行的替代方案:
方案一:用PayloadFactory自动包装为单元素数组
这种方式不需要手动修改原始输入,在 mediation flow 中自动将单个对象包装成数组,再交给csvModule处理,最终输出的CSV依然是预期的单行结构:
<!-- 先将单个JSON对象包装为数组 --> <payloadFactory media-type="json"> <format>[$1]</format> <args> <arg evaluator="json" expression="$."/> </args> </payloadFactory> <!-- 执行CSV转换 --> <csv separator="," quoteChar="""> <property name="header" value="true"/> </csv>
方案二:用Script Mediator手动生成CSV
如果不想依赖csvModule的数组要求,可以用脚本直接构建CSV内容,以JavaScript为例:
<script language="js"><![CDATA[ // 获取JSON payload var payload = mc.getPayloadJSON(); // 提取表头和值 var headers = Object.keys(payload).join(','); var values = Object.values(payload).map(function(val) { // 字符串类型值添加引号,避免包含分隔符时出错 return typeof val === 'string' ? '"' + val + '"' : val; }).join(','); // 设置CSV payload并指定媒体类型 mc.setPayloadXML(<text>{headers}\n{values}</text>); mc.setProperty('messageType', 'text/csv'); ]]></script>
两种方案都能得到你期望的CSV输出:
Name,Age ABC,25
内容的提问来源于stack exchange,提问作者Sumathi M
相关产品推荐
相关产品推荐

