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

如何使用NodeJS处理带有父子层级关系的非规范CSV文件

实现方案

判断父子行的规则

你提供的CSV结构有明确的特征可以直接区分行类型:

  • 父级行:仅含单个文本值,无逗号分隔的第二列内容
  • 子级行:含逗号分隔的两个字段,对应子项的name和value
  • 空行、首行表头直接过滤即可

原生NodeJS实现(无第三方依赖)

直接用Node内置的fs和readline模块逐行处理即可,代码如下:

const fs = require('fs');
const readline = require('readline');

const result = [];
// 存储当前正在处理的父级对象
let currentParent = null;

const rl = readline.createInterface({
  input: fs.createReadStream('替换为你的CSV文件路径'),
  crlfDelay: Infinity
});

rl.on('line', (line) => {
  const trimLine = line.trim();
  // 跳过空行和表头行
  if (!trimLine || trimLine === 'name, value') return;

  const parts = trimLine.split(',').map(item => item.trim());
  // 判断为父级行
  if (parts.length === 1) {
    currentParent = {
      // 移除父级名称中的空格,匹配样例输出的"ParentName"格式
      name: parts[0].replace(/\s/g, ''),
      children: []
    };
    result.push(currentParent);
  } 
  // 判断为子级行,绑定到最近的父级下
  else if (parts.length >= 2 && currentParent) {
    currentParent.children.push({
      name: parts[0],
      value: parts[1]
      // 如果需要匹配样例的首字母小写格式,替换上面两行为:
      // name: parts[0].charAt(0).toLowerCase() + parts[0].slice(1),
      // value: parts[1].charAt(0).toLowerCase() + parts[1].slice(1)
    });
  }
});

rl.on('close', () => {
  // 输出结果,也可自行写为JSON文件
  console.log(JSON.stringify(result, null, 2));
});

适配说明

  • 支持多父级场景:如果CSV中存在多个不同的父级名称,会自动生成多个根对象存入结果数组
  • 可以自行调整字段格式化规则:比如父级名称是否保留空格、子级字段大小写规则等,修改对应赋值逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:03