将csv文件读入JS数组转换为JSON

时间:2016-05-10 07:40:10

标签: arrays json node.js

我正在从一个简单的csv文件中读取数据,并使用Node JS fs将一些来自Web服务的数据添加到一个数组中。该数组定义为:

var allDataOut=[];

此时,代码中添加了数据:

var cumulate = {
            "Details":augment,
            "Timestamp": new Date(),
            data:data
        }
        allDataOut.push(cumulate);
        console.log(allDataOut);
        callback(cumulate);

根据console.log,我正好看到了我所期望的,正确的数据位于表示数组的[]内。

因此,为了创建一个JSON,我希望JSON.stringify(allDataOut)会给我正确的结果。

console.log("writing file");
        var str = JSON.stringify(allDataOut);
        console.log("This is output .stringify" + str);

        fs.appendFileSync(outputFile, str, encoding='utf8');

但正如您在下面的最终数据中所看到的那样,它仍然是数组格式。我在这个论坛上看到了很多关于这个主题的问题,其中一个建议是使用JSON.parse(JSON.stringify(allDataOut)); - 遗憾的是似乎没有任何改变输出。

[ {
    "Details": {
      "Name": "Tophat",
      "SegmentID": "0",
      "DistanceToDepot": "256.53"
    },
    "Timestamp": "2016-04-10T11:40:03.291Z",
    "data": {
      "metadata": {
        "language": "en-US",
        "transaction_id": "1460288403143:279662660",
        "version": "1",
        "Altitude": 49.44
      },
      "observation": {
        "class": "observation",
        "expire_time_gmt": 1460289003,
        "metric": {
          "wspd": 21,
          "gust": null,
          "vis": 9.7
        }
      }
    }   },   {
    "Details": {
      "Name": "Tophat",
      "SegmentID": "25659",
      "DistanceToDepot": "0"
    },
    "Timestamp": "2016-04-10T11:40:40.428Z",
    "data": {
      "metadata": {
        "language": "en-US",
        "transaction_id": "1460288440297:-647605523",
        "version": "1",
        "Altitude": 50.68
      },
      "observation": {
        "class": "observation",
        "expire_time_gmt": 1460288452,
        "metric": {
          "wspd": 18,
          "gust": null,
          "vis": 12.91
        }
      }
    }   } ]

1 个答案:

答案 0 :(得分:0)

因此,为了适应读取数据的应用程序的性质,格式需要逐行获取数据。作为JSON的新手我相信这不会创建一个JSON数组本身,而是在文件中创建一系列JSON对象。并学习了如何在Node JS中进行EOL和迭代。 为实现这一点,我在stringify中添加了一个EOL,如下所示。

console.log("writing file");
        for(var i in allDataOut)
        {
            fs.appendFileSync(outputFile, JSON.stringify(allDataOut[i]) + '\r\n', encoding='utf8');

        }    
        console.log("done");