JSON.parse()用于非常大的JSON文件(客户端)

时间:2017-02-11 01:28:11

标签: javascript json parsing

让我们说我正在进行AJAX调用以获取一些JSON数据并返回300MB + JSON字符串。下载完成后,我需要解析它。

JSON.parse(this.responseText);

在Chrome(v56)中,我会收到此错误:“Uncaught SyntaxError: Unexpected end of JSON input”

如果我下载相同的JSON字符串并在Notepad.exe中打开它,等待一两分钟后,我可以导航到底部,看起来整个JSON字符串看起来很好(它以正确的方式结束)结束标签)。

JSON.parse()是否有限制?如果Chrome无法将JSON字符串转换为正确的JSON对象,那将会让我感到惊讶,因为它的大小如此之大。虽然这有点用于压力测试场景,但我希望看到这可以使用大到500MB的JSON字符串。注意:使用JSON.parse(this.responseText),我对200MB JSON字符串没有任何问题。

(据我所知,JSON大小没有限制。我不是问这个问题。我问的是JSON.parse是否存在特定文件大小或某些内存量的问题,或者是否有不同的问题需要运行的代码行

任何人都知道一个解决方案(客户端是理想的,而不是分页JSON或分解服务器端并进行多次调用)?想法?

更新:

如果我抓取一个较小的JSON字符串并且在AJAX响应之后不解析它,我可以执行console.log(this.responseText.length);它在DevTools中返回11514

对于~300MB JSON字符串,console.log(this.responseText.length);返回0

AJAX电话:

     getData: function(url){
        var xhr = new XMLHttpRequest();

        xhr.onreadystatechange = function(){
            if(this.readyState === 4 && this.status === 200){
                console.log(this.responseText.length);
                return false; //prevent from going to next line to parse

                var data = JSON.parse(this.responseText);
            }
        };

        xhr.onerror = function(){
            console.log('there was an error:', this);
        };

        xhr.open('GET', url, true);
        xhr.send();
    }

思考?我不能成为唯一遇到这个问题的人。

2 个答案:

答案 0 :(得分:0)

如果Chrome表明它突然结束,那么JSON可能会出现错误。可能值得将它放入像http://json.parser.online.fr/这样的json解析器中,并查看它是否有任何问题。

简单地调查记事本中的json字符串可能不会给你正确答案。

答案 1 :(得分:0)

也许使用较小的JSON文件,或将其存储在您的网络服务器文件系统中并进行服务器端渲染。