Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON.parse()用于非常大的JSON文件(客户端)_Javascript_Json_Parsing - Fatal编程技术网

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

Javascript JSON.parse()用于非常大的JSON文件(客户端),javascript,json,parsing,Javascript,Json,Parsing,假设我正在执行一个AJAX调用来获取一些JSON数据,它返回一个300MB+JSON字符串。下载完成后,我需要解析它 JSON.parse(this.responseText); 在Chrome(v56)中,我将得到以下错误:“未捕获的语法错误:JSON输入的意外结束” 如果我下载相同的JSON字符串并在Notepad.exe中打开它,在等待一两分钟后,我可以导航到底部,它看起来就像整个JSON字符串看起来很好(它以正确的结束标记结束) JSON.parse()是否有限制?如果Chrome无法

假设我正在执行一个AJAX调用来获取一些JSON数据,它返回一个300MB+JSON字符串。下载完成后,我需要解析它

JSON.parse(this.responseText);
在Chrome(v56)中,我将得到以下错误:
“未捕获的语法错误:JSON输入的意外结束”

如果我下载相同的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();
    }

想法?我不可能是唯一一个遇到这个问题的人。

如果chrome提示JSON突然终止,JSON中的某个地方可能有错误。可能值得将其放入json解析器中,看看是否有任何问题


简单地研究记事本中的json字符串可能不会给您正确的答案。

可能使用较小的json文件,或者将其存储在Web服务器文件系统中并进行服务器端渲染。

您是否已确认返回了整个json字符串?可能是@sideroxylon的副本我已尽力确认。最明显的答案是字符串不完整,但它似乎不是我能说的那么完整。根据您的更新,有一个问题-在AJAX函数的success/done函数中是
JSON.parse()
还是
console.log()
?是的。。。添加更新原始问题以显示AJAX请求我尝试过的两个JSON验证器在该站点中大量复制+粘贴时做得不太好=/这是为了对应用程序进行压力测试——我们在生产中不会看到300MB的JSON字符串(希望如此)——但每天都有100MB+的JSON字符串。数据在前端本身上用于呈现视觉内容。