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

如何使用@json2csv/node转换器为CSV添加最终汇总行?

在@json2csv/node中添加price列汇总行

我正在使用@json2csv/node的自定义转换器,想在生成的CSV末尾添加一行,用来汇总price列的总和。

目前生成的CSV:

"carModel","price"
"AUDI",0
"BMW",15
"MERCEDES",20
"PORSCHE",30
"TESLA",50

期望得到的CSV:

"carModel","price"
"AUDI",0
"BMW",15
"MERCEDES",20
"PORSCHE",30
"TESLA",50
,115

注:实际场景中转换器内还有大量其他计算,无法在调用解析器前直接添加汇总行,以下是最小可复现示例:

const { Parser } = require('@json2csv/plainjs');

const data = [
  { "carModel": "Audi", "price": 0 },
  { "carModel": "BMW", "price": 15000 },
  { "carModel": "Mercedes", "price": 20000 },
  { "carModel": "Porsche", "price": 30000 },
  { "carModel": "Tesla", "price": 50000 }
];

function transformRow() {
  return (item) => ({
    ...item,
    carModel: item.carModel.toUpperCase(),
    price: item.price / 1000,
  });
}

try {
  const opts = {
    transforms: [transformRow()]
  };
  const parser = new Parser(opts);
  const csv = parser.parse(data);
  console.log(csv);
} catch (err) {
  console.error(err);
}

解决方案

可以通过给自定义转换器添加postProcess钩子来实现,在钩子中汇总价格并追加到CSV末尾。修改后的代码如下:

const { Parser } = require('@json2csv/plainjs');

const data = [
  { "carModel": "Audi", "price": 0 },
  { "carModel": "BMW", "price": 15000 },
  { "carModel": "Mercedes", "price": 20000 },
  { "carModel": "Porsche", "price": 30000 },
  { "carModel": "Tesla", "price": 50000 }
];

function transformWithTotal() {
  let totalPrice = 0;

  // 处理每行数据,同时累加转换后的价格
  const transformRow = (item) => {
    const processedItem = {
      ...item,
      carModel: item.carModel.toUpperCase(),
      price: item.price / 1000,
    };
    totalPrice += processedItem.price;
    return processedItem;
  };

  // 所有行处理完成后执行的钩子
  transformRow.postProcess = (csv) => {
    // 追加汇总行,保持CSV格式一致
    return `${csv}\n,${totalPrice}`;
  };

  return transformRow;
}

try {
  const opts = {
    transforms: [transformWithTotal()]
  };
  const parser = new Parser(opts);
  const csv = parser.parse(data);
  console.log(csv);
} catch (err) {
  console.error(err);
}

核心说明

  • 在转换器内部维护totalPrice变量,处理每行数据时同步累加转换后的价格值
  • 利用postProcess钩子,在所有行解析完成后,将汇总行拼接到生成的CSV字符串末尾
  • 汇总行格式与原CSV匹配:第一列留空,第二列填写总价,确保逗号分隔的格式正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:05:15