将CSV数组转换为JSON NodeJS

时间:2019-05-24 15:54:27

标签: arrays node.js json csv

我正在从包含URL的{​​{1}}抓取数据。我要抓取的数据格式如下:

我正在csv中并使用nodejs-Node.jshttps://www.npmjs.com/package/requestify

当我操纵requestify package时,它的格式与提供的屏幕截图完全相同。

我正在尝试将其转换为response.getBody(),我可以在循环中进行迭代以将值插入数据库,但是,我正努力将数据转换为JSON array格式。

我尝试过以多种方式拆分数组(JSON)。我已经尝试过comma, single quote, double quoteJSON.parse()(以及两者的结合)。

这是我正在使用的代码。最终,当我在循环中JSON.stringify()行时,它应该是console.log格式,但是,它仍然是逗号分隔的值。

JSON

2 个答案:

答案 0 :(得分:0)

我认为有一个基本的误解

var lineArray = dataBody.split('\r\n');

lineArray现在包含类似

"a", "b", "c"

但是要做类似的事情

var data = JSON.parse(lineArray);

您需要使用lineArray

{ "a":"1", "b":"2", "c":"3" }

我认为您需要类似的东西

const lineData = lineArray.split(',');
const keys = ["name", "age", "gender"];
const jsonLineData = {};
keys.forEach((key, index) => {
    jsonLineData[key] = lineData(index);
});

答案 1 :(得分:0)

由于我的csv托管在S3上,因此我使用csvtojsonaws-dsk解决了这个问题。

async function startAWS(db){
  //Retrieve AWS IAM credentials for the 'master' user
  var awsCredentials;
  try{ 
    awsCredentials = await retrievePromise(config.get('aws')); 
  }
  catch (e) { 
    console.log({error:e},'startAWS error'); 
  }
  //Setup the AWS config to access our S3 bucket
  AWS.config = new AWS.Config({
    accessKeyId :  awsCredentials.principal,
    secretAccessKey :awsCredentials.credential,
    region:'us-east-1'
  });
  //Call S3 and specify bucket and file name
  const S3 = new AWS.S3();
  const params = {
    Bucket: '***',
    Key: '***' //filename
  };
  //Convert csv file to JSON
  async function csvToJSON() {
  // get csv file and create stream
  const stream = S3.getObject(params).createReadStream();
  // convert csv file (stream) to JSON format data
  const json = await csv().fromStream(stream);

  //connect to DB and continue script
  db.getConnection()
  .then(async (conn) => {
    if(json.length) {
      for(var s = 0; s < json.length; s++) {
        var rows = json[s];

        const insert = await conn.query(
          'SQL HERE'
        );
      }
    }
  })
  };
  csvToJSON();
}