首页 > 解决方案 > 在没有库的情况下使用 nodeJS 解析 CSV 字符串

问题描述

我想在 firebase 中创建一个云函数来解析 csv 文件并将它们添加为 firestore 文档。不知何故,我尝试的所有库似乎都不起作用。每当我添加一个 csv 库时,该函数甚至都不会部署。因此,我想在不使用库的情况下解析 CSV 文件。但是,我似乎无法弄清楚在使用地图和数组时如何正确解析它。我有以下字符串类型的字符串。用占位符替换了一些数据。

subject,contacts,dateStart,dateEnd,timeStart,timeEnd,isRecurring,frequence,location,room,visitors,sendInvite

Sollicitatie,[{"name":"<name here>","email":"<email here>","phoneNumber":"<phone number here>"}],28-09-2020,28-09-2020,13:00,14:00,true,yearly,<location here>,2,[{"name":"<name here>","email":"<email here>","visitorImage":"imgRef","visitorType":"Relation","phoneNumber":"<telephone here>","licencePlate":"<licencePlate>"}],true

我想在 Firestore 中获取这些数据,如下所示:

subject: subject,
contacts:[
    {
        name: name,
        email: email,
        phoneNumber: phoneNumber
    },
    {
        name: name,
        email: email,
        phoneNumber
    }
],
dateStart: dateStart,
dateEnd, dateEnd,
timeStart, timeEnd,
isRecurring, isRecurring,
frequence, frequence,
location: location,
room: room,
visitors:[
    {
        name: name,
        email: email,
        phoneNumber: phoneNumber
    },
    {
        name: name,
        email: email,
        phoneNumber
        //Whatever data also needs to be added
    }
]

是否有一个可以工作的库/我的 package.json 有问题,还是有一个可以工作的脚本?我试图编写一个脚本来执行此操作,但它远未奏效。我尝试了以下方法并获得了正确的字符串,但我无法以正确的方式获得数组。

const convert = (from, to) => str => Buffer.from(str, from).toString(to);
              const hexToUtf8 = convert('hex', 'utf8');
              const string = hexToUtf8(contents);
              const data = string.split('\n');
              for(i=0;i<=data.length - 1;i++){
                if(i == 0){
                  continue;
                }
                const row = data[i];
                const rowValues = [];

                const elems = row.split(",");
                console.log(elems);

                var arrayParse;
                var parsing = 0;
                for(j=0;j<=elems.length - 1;j++){
                  const elem = elems[j];
                  if(parsing == 1){
                    arrayParse += "," + elem;
                    continue;
                  }else if(elem[0] == "["){
                    arrayParse += elem;
                    parsing = 1;
                    continue;
                  }else if(elem[elem.length - 1] == "]"){
                    arrayParse += elem;
                    parsing = 0;
                    rowValues.push(arrayParse);
                    arrayParse = "";
                    continue;
                  }else{
                    rowValues.push(elem);
                  }
                }
                console.log(rowValues);

标签: node.jsfirebasecsvparsinggoogle-cloud-firestore

解决方案


推荐阅读