从 URL 获取 CSV 文件并转换为 JSON 数组
Get CSV File From URL & Convert to JSON Array
我需要从 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 数组。
你已经完成了一半。
您只需要:
- 将字符串拆分为 end-of-line
\n
。你得到一个字符串数组,
每个代表您的 csv 文件中的一行。
- 将每行拆分为
,
。
对于您的情况,不要忘记忽略第一行(header)。
查看这篇文章:
https://medium.com/@sanderdebr/converting-csv-to-a-2d-array-of-objects-94d43c56b12d
您可以包含 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);
用\r\n
拆分字符串得到一个字符串数组。使用数组中的 .map
使其成为对象数组。
这是一个例子:
var newArray = decodedString.split('\r\n').slice(1)map(row => {
var temp = row.split(',')
return {
name: temp[0],
value: temp[1],
email: temp[2]
}
})
希望这对您有所帮助:)
包括一个名为 csvtojson
的包
const request=require('request')
const csv=require('csvtojson')
csv()
.fromStream(request.get('http://mywebsite.com/mycsvfile.csv'))
.subscribe((json)=>{
return new Promise((resolve,reject)=>{
// long operation for each json e.g. transform / write into database.
})
},onError,onComplete);
使用异步和等待
async function ConvertCSVtoJSON{
const jsonArray = await csv().fromStream(request.get('http://mywebsite.com/mycsvfile.csv'));
console.log(jsonArray);
}
我需要从 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 数组。
你已经完成了一半。
您只需要:
- 将字符串拆分为 end-of-line
\n
。你得到一个字符串数组, 每个代表您的 csv 文件中的一行。 - 将每行拆分为
,
。
对于您的情况,不要忘记忽略第一行(header)。
查看这篇文章:
https://medium.com/@sanderdebr/converting-csv-to-a-2d-array-of-objects-94d43c56b12d
您可以包含 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);
用\r\n
拆分字符串得到一个字符串数组。使用数组中的 .map
使其成为对象数组。
这是一个例子:
var newArray = decodedString.split('\r\n').slice(1)map(row => {
var temp = row.split(',')
return {
name: temp[0],
value: temp[1],
email: temp[2]
}
})
希望这对您有所帮助:)
包括一个名为 csvtojson
的包const request=require('request')
const csv=require('csvtojson')
csv()
.fromStream(request.get('http://mywebsite.com/mycsvfile.csv'))
.subscribe((json)=>{
return new Promise((resolve,reject)=>{
// long operation for each json e.g. transform / write into database.
})
},onError,onComplete);
使用异步和等待
async function ConvertCSVtoJSON{
const jsonArray = await csv().fromStream(request.get('http://mywebsite.com/mycsvfile.csv'));
console.log(jsonArray);
}