让我们说我正在进行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();
}
思考?我不能成为唯一遇到这个问题的人。
答案 0 :(得分:0)
如果Chrome表明它突然结束,那么JSON可能会出现错误。可能值得将它放入像http://json.parser.online.fr/这样的json解析器中,并查看它是否有任何问题。
简单地调查记事本中的json字符串可能不会给你正确答案。
答案 1 :(得分:0)
也许使用较小的JSON文件,或将其存储在您的网络服务器文件系统中并进行服务器端渲染。