首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用带206部分(json)内容的提取

如何使用带206部分(json)内容的提取
EN

Stack Overflow用户
提问于 2022-02-14 15:45:12
回答 1查看 362关注 0票数 0

我有一个后端,作为206个部分内容的块返回大文件。我有逻辑:

代码语言:javascript
复制
fetch(url, query)
    .then((resp)=>resp.json())
    .then(...)

但是,由于服务器没有返回完整的json对象,所以代码失败了。

是否有一些常用的库来解决这个问题(猴键盘获取),还是应该编写服务工作者或代理?为什么默认浏览器fetch不支持获取完整对象?

EN

回答 1

Stack Overflow用户

发布于 2022-02-14 16:05:36

JSON解析在部分对象上失败并不奇怪。fetch只是要获取您所要求的内容(好吧,接下来是重定向),所以如果query有请求部分响应的选项,那么您将得到这样的结果。

您可以构建JSON字符串,直到您有了要解析的完整响应,如下所示:

代码语言:javascript
复制
async function getAll() {
    // Start with a blank string
    let json = "";
    do {
        // Get this chunk
        const resp = await fetch(url, /*...query for next chunk...*/);
        if (!resp.ok && resp.status !== 206) {
            throw new Error(`HTTP error ${resp.status}`);
        }
        // Read this chunk as text and append it to the JSON
        json += await resp.text();
    } while (resp.status === 206);
    return JSON.parse(json);
}

显然,这是一个粗略的草图,您需要处理Range头,等等。

该代码还依次请求每个块,在请求下一个块之前等待块到达。如果您事先知道块大小是什么,那么您可能能够并行化它,尽管它会更复杂,块可能会偏离顺序,等等。

它还假设服务器不会抛出一个曲线球,就像给您一个比您要求的范围更大的范围,这与您已经收到的内容重叠。如果这是一个真正的关注,您将需要为它添加逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71114513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档