Joh*_*ger 1 csv ajax node.js express axios
我正在向 URL 端点发出 GET 请求,该端点使用 axios 在 Node/Express 设置上发回 CSV 文件。
如何读取该文件并将其解析为一个数组,其中包含每行数据的对象?我喜欢“neat-csv”如何处理解析的示例,但我愿意接受建议。
const response = await axios.get("url/end/point",{ responseType: 'blob',});
Run Code Online (Sandbox Code Playgroud)
到目前为止,除了请求之外,我没有任何实际的实现示例,因为我对从哪里开始没有明确的看法,并且在网上找不到任何好的指南。我找到的所有指南都涉及请求文件,然后将其保存到我不想要的文件系统中。我只想请求该文件,解析它,然后通过我拥有的 Socket.io 连接广播 CSV 文件中的数据。
Logginresponse.data清楚地给出了数据输出,但当然没有格式化。只是原始数据/文本。
在响应中有一个Content-Disposition参数,内容为attachment; filename=name_of_file.csv
如果有帮助的话?
提前欢呼并致谢!
也许您已经找到了答案,但我认为值得在这里添加一些内容,以防万一:
因此,您将从 axios 请求中获取作为 BLOB 的 CSV。到目前为止,一切都很好!正如你所说:
const response = await axios.get("url/end/point",{ responseType: 'blob',});
const file = response.data;
Run Code Online (Sandbox Code Playgroud)
在这里,您可以(并在网上找到)不同的方法来制作物体。
首先,要将其记录为正确的字符串,您可以执行以下操作:
file.text().then((csvStr) => {
console.log(csvStr);
})
Run Code Online (Sandbox Code Playgroud)
它将记录如下内容(作为字符串):
Title1,Title2,Title3
one,two,three
example1,example2,example3
Run Code Online (Sandbox Code Playgroud)
在这里,您有不同的选择。主要是:
A) 编写自己的函数,将 CSV 格式的字符串解析为对象
我在 StackOverflow 上找到的一个很好的例子来自Wesley Smith 的回答
function csvJSON(csvStr){
var lines=csvStr.split("\n");
var result = [];
// NOTE: If your columns contain commas in their values, you'll need
// to deal with those before doing the next step
// (you might convert them to &&& or something, then covert them back later)
// jsfiddle showing the issue https://jsfiddle.net/
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
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你这样做:
const jsonObj = csvJSON(csvStr);
console.log(jsonObj);
Run Code Online (Sandbox Code Playgroud)
jsonObj您将以您想要的对象的形式进入CSV!
B)使用一些可以为您做到这一点的第三方库
在这里,您可能会找到一些选择。随意选择您喜欢的任何内容。我选择了CSVTOJSON并将按照相同的示例进行展示:
import csvToJson from 'csvtojson';
...
csvToJson()
.fromString(csvStr)
.then((jsonObj)=>{
console.log(jsonObj);
});
Run Code Online (Sandbox Code Playgroud)
这样,您也将以jsonObj您想要的对象的形式进入 CSV!
使用任何选项A或B,您将得到:
注意:
在这两个选项中,您可能必须在块内实现转换,then()因为当您准备好使用字符串值时,它就在那里:
...
file.text().then((csvStr) => {
// Option A
const jsonObj1 = csvJSON(csvStr);
console.log(jsonObj1);
// Option B
csvToJson()
.fromString(csvStr)
.then((jsonObj2)=>{
console.log(jsonObj2);
})
});
Run Code Online (Sandbox Code Playgroud)
这取决于您和您使用的 CSV 文件。最好考虑一下:
| 归档时间: |
|
| 查看次数: |
9660 次 |
| 最近记录: |