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

如何使用Mirth Connector将嵌套JSON转换为CSV?新手求助

解决Mirth Connector中JSON转CSV输出单行的问题

嘿,刚上手Mirth Connector遇到这种问题太正常了!我看了你贴的代码,主要是循环逻辑没处理好嵌套JSON,而且没正确生成多行的CSV结构,导致最后只输出一行。我给你整理了修复后的方案,一步步来:

原代码的核心问题

  • 表头(col)的定义放在了循环里,每次遍历元素都会重新创建,而且逻辑不对
  • 嵌套JSON的遍历代码截断了,没处理完深层字段
  • 没有把每一行数据单独添加到输出集合里,最后自然只会有一行

修复后的完整代码

// 假设你的jsonObject已经是解析好的JSON数组(如果是字符串,先加var jsonObject = JSON.parse(payload);)
var headers = [];
var rows = [];

// 递归收集所有字段作为表头,嵌套字段用"父字段.子字段"格式
function collectKeys(obj, prefix = '') {
    for (var key in obj) {
        if (typeof obj[key] === 'object' && obj[key] !== null) {
            collectKeys(obj[key], prefix + key + '.');
        } else {
            var fullKey = prefix + key;
            if (!headers.includes(fullKey)) {
                headers.push(fullKey);
            }
        }
    }
}

// 先从第一个元素提取所有表头(如果JSON结构统一,这样效率最高)
if (jsonObject.length > 0) {
    collectKeys(jsonObject[0]);
}

// 遍历每个JSON元素,生成对应行数据
for each (element in jsonObject) {
    var rowData = {};
    
    // 递归填充当前元素的所有字段到rowData
    function fillRow(obj, prefix = '') {
        for (var key in obj) {
            if (typeof obj[key] === 'object' && obj[key] !== null) {
                fillRow(obj[key], prefix + key + '.');
            } else {
                var fullKey = prefix + key;
                rowData[fullKey] = obj[key] ? obj[key].toString() : '';
            }
        }
    }
    
    fillRow(element);
    
    // 按照表头顺序生成一行数据,避免列错位
    var row = [];
    for each (header in headers) {
        row.push(rowData[header] || '');
    }
    rows.push(row);
}

// 拼接成标准CSV格式,处理特殊字符(逗号、引号)
var csvContent = headers.join(',') + '\n';
for each (row in rows) {
    var escapedRow = row.map(function(cell) {
        // 把字段里的双引号转成两个,再用双引号包裹字段
        return '"' + cell.replace(/"/g, '""') + '"';
    });
    csvContent += escapedRow.join(',') + '\n';
}

// 将生成的CSV设置为输出payload
response.setPayload(csvContent);

关键说明

  1. 处理嵌套JSON:用递归函数把嵌套字段转成user.name这种扁平格式,确保所有字段都能对应到CSV的列
  2. 表头只生成一次:从第一个JSON元素提取所有表头,避免重复或缺失
  3. 多行生成:把每个元素对应的行数据存到rows数组里,最后统一拼接成完整CSV,自然就会有多行输出
  4. CSV规范兼容:自动处理包含逗号、双引号的字段,避免CSV格式出错

额外提醒

  • 如果你的输入是JSON字符串,记得先加var jsonObject = JSON.parse(payload);把字符串转成JSON对象
  • 把这段代码放在Mirth通道的Transformer环节的JavaScript步骤里,就能替换原来的代码啦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:35:53