【问题标题】:How to get JSON data out of csvtojson scope?如何从 csvtojson 范围内获取 JSON 数据?
【发布时间】:2022-03-26 05:36:08
【问题描述】:

我是 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 outside?我只想要一个简单的全局变量,我可以稍后在脚本中使用它来访问 JSON。

【问题讨论】:

  • 你可以尝试使用asyncawait或者回调函数。
  • 任何简单的例子让我看看它是如何工作的?我已经看到了一些关于使用“异步”的参考,但没有关于如何做到这一点的基本示例。只是 console.log 这对我没有帮助......
  • 嗨,我添加了下面的示例。如果你有任何问题,尽管问:)

标签: javascript json csvtojson


【解决方案1】:

您可以使用 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);
})()

【讨论】:

  • 我不认为这是正确的。我的 IDE 说 await arr.push(json) 行无效,并希望删除等待。此外,arr 在函数之外不可用。 :-(
  • 为什么await arr.push(json) 不正确?你能解释一下吗?要使用 promise 存储值并从任何地方访问它,您必须等待结果,然后由于 js 的异步和单线程性质而访问该值。
  • 或者你可以使用任何同步方法。但它会阻塞你的主线程。
【解决方案2】:

您可以使用“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'
    }]
}

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

【讨论】:

    【解决方案3】:

    你可以尝试使用asyncawait,只要写一些你想在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' } ]
      })();
    

    【讨论】:

      【解决方案4】:

      我正在使用 convert-csv-to-json npm 包。 https://www.npmjs.com/package/convert-csv-to-json

      let csv2Json = require('convert-csv-to-json');
      
      let fileInputName = 'stores.csv';
      let fileOutputName = 'stores.json';
      
      csv2Json.fieldDelimiter(',').generateJsonFileFromCsv(fileInputName, fileOutputName);
      
      
      let json = csv2Json.getJsonFromCsv("stores.csv");
      for(let i=0; i<json.length;i++){
          console.log(json[i]);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        • 2022-07-22
        • 1970-01-01
        • 1970-01-01
        • 2012-08-13
        • 2014-09-23
        • 1970-01-01
        相关资源
        最近更新 更多