0

我需要从托管在 url 上的 csv 文件中获取数据并将其转换为 json 数组。直到现在我都在使用这个。

    import request from "request-promise";
    import encode from "nodejs-base64-encode";

    let url = 'https://example.com/filename.csv';

    function conversion(url) {
        return request.get(url, {encoding: null})
        .then( function (res) {
            //var base64File = encode.encode(res, 'base64');
            //how to convert the received data to json
        });
    }

我曾尝试先转换为 base64,然后解码字符串,但它只是给了我如下所示的字符串。

name,value,email
jason,23,email@email.com
jeremy,45,email@email.com
nigel,23,email@email.com
jason,23,email@email.com

我需要它作为一个 json 数组。

4

3 回答 3

0

你已经成功了一半。

你只需要:

  1. 通过 end-of-line 分割字符串\n。您会得到一个字符串数组,每个字符串代表 csv 文件中的一行。
  2. 将每一行拆分为,.

在您的情况下,不要忘记忽略第一行(标题)。

看看这篇文章:

https://medium.com/@sanderdebr/converting-csv-to-a-2d-array-of-objects-94d43c56b12d

于 2020-05-06T22:20:27.363 回答
0

你可以包含一个像csvtojson这样的包来为你处理这个转换。

/** csv file
a,b,c
1,2,3
4,5,6
*/
const csvFilePath='<path to csv file>'
const csv=require('csvtojson')
csv()
.fromFile(csvFilePath)
.then((jsonObj)=>{
    console.log(jsonObj);
    /**
     * [
     *  {a:"1", b:"2", c:"3"},
     *  {a:"4", b:"5". c:"6"}
     * ]
     */ 
})

// Async / await usage
const jsonArray=await csv().fromFile(csvFilePath);
于 2020-05-06T22:26:44.020 回答
0

拆分字符串\r\n以获得字符串数组。使用.mapin 数组使其成为对象数组。

这是一个例子:

var newArray = decodedString.split('\r\n').slice(1)map(row => {
    var temp = row.split(',')
    return {
             name: temp[0],
             value: temp[1],
             email: temp[2]
        }
})

希望这可以帮助 :)

于 2020-05-06T22:29:46.757 回答