我可以获取可读流然后转换为JSON客户端吗?

时间:2018-05-13 21:49:22

标签: javascript json csv stream

我希望使用Google表格CSV作为数据源。我想在客户端上获取CSV数据,然后转换为JSON。

我可以抓取CSV,返回ReadableStream。但是,我不确定如何正确读取该响应并转换为JSON。

我找到了一个npm package which should help convert the CSV data to JSON,但是有一点时间处理这个流。

示例:https://jsfiddle.net/21jeq1h5/3/

有人能指出我正确的方向使用ReadableStream吗?

1 个答案:

答案 0 :(得分:3)

由于CSV只是文字,因此解决方案是使用response.text() API的fetch()方法。

https://developer.mozilla.org/en-US/docs/Web/API/Body/text

文本在板载后,就像从文件中解析CSV一样简单。如果您希望将对象作为输出,则必须将标题包含在CSV(您的标题)中。

我在下面提供了代码段。它不会在SO上运行,因为SO在AJAX请求上将原点设置为null。所以我还提供了一个工作的codepen解决方案的链接。

fetch('https://docs.google.com/spreadsheets/d/e/KEY&single=true&output=csv')
  .then(response => response.text())
  .then(transform);

function transform(str) {
  let data = str.split('\n').map(i=>i.split(','));
  let headers = data.shift();
  let output = data.map(d=>{obj = {};headers.map((h,i)=>obj[headers[i]] = d[i]);return obj;});
  console.log(output);
}

<强>笔

https://codepen.io/randycasburn/pen/xjzzvW?editors=0012

修改

我应该补充一点,如果你真的想用JSON字符串(根据你的问题),你可以运行

json = JSON.stringify(output);