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

使用JS将CSV转换为按Flag/AttrUnit分组的键值对对象

CSV转分组JSON实现方案

现有CSV数据

Attrname1,AttrValue1,AttrUnit1,Flag1,Attrname2,AttrValue2,AttrUnit2,Flag2,Attrname3,AttrValue3,AttrUnit3,Flag3,Attrname4,AttrValue4,AttrUnit4,Flag4,Attrname5,AttrValue5,AttrUnit5,Flag5
Type,"LTPS IPS LCD",DISPLAY,DISPLAY,Size,"6.3 inches, 99.1 cm2 ",DISPLAY,DISPLAY,Resolution,"1080 x 2280 pixels, 19:9 ratio ",DISPLAY Model,DISPLAY Model,Type,"LTPS IPS, 16M colors",Ram,DISPLAY Model,Size,"6.3 inches, 99.1 cm2 (~82.5% screen-to-body ratio)",DISPLAY Model,DISPLAY Model

预期输出

{
    "Display":{
        "Type":"LTPS IPS LCD",
        "Size":"6.3 inches, 99.1 cm2 ",
        "Resolution":"1080 x 2280 pixels, 19:9 ratio "
    },
    "DISPLAY Model":{
        "Type":"LTPS IPS, 16M colors",
        "Size":"6.3 inches, 99.1 cm2 (~82.5% screen-to-body ratio)"
    }    
}

转换规则

Attrname作为键,AttrValue作为值,按照Flag或AttrUnit字段分组。

原代码问题说明

原有实现存在三个核心问题:

  1. data定义为数组类型,每次push生成新的独立对象,无法自动合并同分组的键值对
  2. 遍历逻辑错误:通过对象键的索引拼接属性名,会出现序号不匹配的问题,无法正确取到对应组的Flag、AttrUnit属性
  3. 多余的数组包装和JSON序列化操作,导致值格式不符合预期

修正后代码

var http = require('http');
var express = require('express');
var port = process.env.PORT || 8089;
var app = express();
var appRoutes = require('./routes/appRoutes');
var bodyParser = require('body-parser');
var cors = require('cors');
app.use(express.static('public'));
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use('/', appRoutes);
http.createServer(app).listen(port);
const csvFilePath = 'test.csv'
const csv = require('csvtojson')
var jsonToCSV = require('json-to-csv');
const fileName = 'save-html2.csv';
// 将data修改为对象类型,用于存储分组数据
let data = {};
csv()
    .fromFile(csvFilePath)
    .then((jsonObjj) => {
        jsonObjj.forEach((jsonObj) => {
            // 遍历5组属性,序号从1到5
            for(let i = 1; i <= 5; i++) {
                const flag = jsonObj[`Flag${i}`];
                const unit = jsonObj[`AttrUnit${i}`];
                // 按规则判断是否属于该分组
                if (flag === unit) {
                    const attrName = jsonObj[`Attrname${i}`];
                    const attrValue = jsonObj[`AttrValue${i}`];
                    if (!attrName) continue;
                    // 分组不存在则初始化
                    if (!data[unit]) {
                        data[unit] = {};
                    }
                    // 写入键值对
                    data[unit][attrName] = attrValue;
                }
            }
        })
        // 格式化输出结果
        console.log(JSON.stringify(data, null, 4))
    })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:09:01