0

我是 Javascript 的新手,也许你可以帮助我理解这一点。此处的 csvtojson 示例都显示了到控制台的日志记录,效果很好:

https://www.npmjs.com/package/csvtojson#from-csv-file-to-json-array

const csvFilePath='<path to csv file>'
const csv=require('csvtojson')
csv()
.fromFile(csvFilePath)
.then((jsonObj)=>{
    console.log(jsonObj);
})

我的问题是 - 我如何在这个范围之外使用 jsonObj ?我只想要一个简单的全局变量,稍后我可以在脚本中使用它来访问 JSON。

4

3 回答 3

2

您可以使用 IIFE(立即调用函数表达式)来包装所有异步代码并将值存储在全局变量中,并可以在异步 IIFE 中访问它。要存储该值并从您必须等待结果的任何地方访问它,然后由于 js 的异步和单线程性质而访问该值。

const csv = require('csvtojson');

let arr = [];

(async function () {
    const json = await csv().fromFile('./demo.csv');
    await arr.push(json);
    console.log(arr);
})()
于 2020-12-29T06:15:39.947 回答
1

您可以使用“convert-excel-to-json”npm 包。一个例子如下:

'use strict';
const excelToJson = require('convert-excel-to-json');
 
const result = excelToJson({
    sourceFile: 'SOME-EXCEL-FILE.xlsx'
});
 
// result will be an Object containing keys with the same name as the sheets found on the excel file. Each of the keys will have an array of objects where each of them represents a row of the container sheet. e.g. for a excel file that has two sheets ('sheet1', 'sheet2')
{
    sheet1: [{
        A: 'data of cell A1',
        B: 'data of cell B1',
        C: 'data of cell C1'
    }],
    sheet2: [{
        A: 'data of cell A1',
        B: 'data of cell B1',
        C: 'data of cell C1'
    }]
}

然后,您可以在任何地方使用结果对象。

于 2020-12-29T06:01:08.027 回答
1

您可以尝试使用asyncand await,只需编写一些您想在 IIFE 中执行的代码,例如:

  const csvFilePath = './aCSV.csv';
  const csv = require('csvtojson');
    
  // a IIFE
  (async () => {
    const jsonObj = await csv().fromFile(csvFilePath);
    console.log(jsonObj);
    // [ { a: '1', b: '2', c: '3' }, { a: '4', b: '5', c: '6' } ]
  })();
于 2020-12-29T06:01:51.110 回答