小编nga*_*n93的帖子

使用 Vanilla JS 从 ReadableStream 解析 JSON 数据块

我正在获取一个大的 JSON 文件(200mb),并且我想将这些数据呈现为数据流中的数据。我遇到的问题是,在解码和解析流式传输给我的块后,会返回一个语法错误我Unexpected end of JSON input在控制台中。我想要做的是解析返回块并在获得数据后立即对其进行处理。但是,由于 ReadableStream 以块的形式进行流式传输,而这些块的切片方式是不可预测的,因此我无法对返回值执行 JSON.parse() 。需要进行什么样的数据处理才能实现这一点?有更好的方法吗?

这是我的代码:

const decoder = new TextDecoder('utf-8')
fetch("../files/response.json")
    .then(response => {
        const reader = response.body.getReader()
        new ReadableStream({
            start(controller) {
                function enqueueValues() {
                    reader.read()
                    .then(({ done, value }) => {
                        if (done) {
                            controller.close() // stream is complete
                            return
                        }
                        var decodedValue = decoder.decode(value) // one chunk of invalid json data in string format

                        console.log(JSON.parse(decodedValue)) // json syntax error

                        // do something with the json value here

                        controller.enqueue(value)

                        enqueueValues() …
Run Code Online (Sandbox Code Playgroud)

javascript json stream

5
推荐指数
1
解决办法
1888
查看次数

标签 统计

javascript ×1

json ×1

stream ×1