yas*_*ar 2 csv json object reactjs
我正在开发一个 Reactjs 项目。在该项目中,我有这样的场景,我需要从本地读取 csv 文件并将其转换为 json 对象。我正在使用csvtojson节点包将 csv 文件转换为 json 对象。请参阅下面的代码:
import React from 'react';
import ReactDOM from 'react-dom';
var objects;
var ReadFile = React.createClass({
readFile:function(){
var file = this.refs.file.files[0];
var reader = new FileReader();
reader.onload = function(evt){
var resultText = evt.target.result;
objects = this.csvToJson(resultText);
console.log(objects);
}.bind(this);
var newFile = file.slice(0,5000);
reader.readAsText(newFile);
},
csvToJson:function(csvString){
var Converter = require("csvtojson").Converter;
var converter = new Converter({});
converter.fromString(csvString, function(err,result){
//When i console log the result it is working but when i return The result:
// i am getting a undefined error
//console.log(result);
return result;
});
},
render:function(){
return (
<input type="file" ref="file" onChange={this.readFile} />
);
}
});
ReactDOM.render(<ReadFile />,document.getElementById('container'));
Run Code Online (Sandbox Code Playgroud)
当我控制台记录csvToJson文件的结果时,我收到未定义的错误。请有人指导我,我做错了什么?
import React, { Component } from 'react'
import { connect } from 'react-redux'
import ReactFileReader from 'react-file-reader';
export default class CsvRead extends React.Component {
constructor(props) {
super(props);
}
handleFiles = files => {
var reader = new FileReader();
reader.onload = function(e) {
// Use reader.result
var csv = reader.result;
var lines = csv.split("\n");
var result = [];
var headers=lines[0].split(",");
for(var i=1;i<lines.length;i++){
var obj = {};
var currentline=lines[i].split(",");
for(var j=0;j<headers.length;j++){
obj[headers[j]] = currentline[j];
}
result.push(obj);
}
//return result; //JavaScript object
result= JSON.stringify(result); //JSON
console.log(result);
}
reader.readAsText(files[0]);
}
render() {
return (
<ReactFileReader handleFiles={this.handleFiles} fileTypes={'.csv'}>
<button className='btn'>Upload</button>
</ReactFileReader>
);
}
}
Run Code Online (Sandbox Code Playgroud)
这会工作得很好。