我可以帮您翻译成中文:我能否在客户端获取可读流(Readable Stream)并将其转换为 JSON?

6

该URL的可读取流包含一个HTML文件,而不是CSV。这里有一个jsfiddle来展示:https://jsfiddle.net/21jeq1h5/4/ - Randy Casburn
是的,没错 - Vinnie James
1
好的...那么,请提供一个开放表格的链接,我会回答你的问题。 - Randy Casburn
1个回答

9

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

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);

@vinnie-james,您提出的建议无法返回可读流响应。response.text()将返回资源中的整个文本,而不是以块获取数据。我希望这正是您想要的,否则解决方案是错误的。 - Akansh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接