使用 eval 和替代方案解析大 json 时出现问题
我正在尝试使用 javascript 解析一个大的 json 文件(240'000 个字符)。我正在使用 ajax 从 servlet 检索 json 数据。我使用的代码适用于较小的样本,但当 xmlHttp.responseText 包含大量 json 数据时,就会抛出此问题。
Uncaught SyntaxError: Unexpected token ILLEGAL
mycallbackFunction
xmlHttp.onreadystatechange
它表示意外的标记位于包含以下内容的行上
var data = eval('(' + xmlHttp.responseText + ')');
。 这是代码的要点:
getJsonData(mycallbackFunction, parameters);
function getJsonData(callbackFunction, parameters){
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', servlet_url + parameters, true);
xmlHttp.onreadystatechange = function(){
callbackFunction(xmlHttp);
}
xmlHttp.setRequestHeader('Content-Type', 'application/json');
xmlHttp.send(null);
}
function mycallbackFunction(xmlHttp){
var data = eval('(' + xmlHttp.responseText + ')');
}
如果有任何区别,则从 xmlHttp.onreadystatechange 调用使用 eval() 的方法。
我还尝试使用 json2.js 并得到相同的结果,它适用于较小的 json 样本,但当我尝试使用 240k 字符文件时,它会显示:
Uncaught #<Object>
提前致谢。
I'm trying to parse a large json file (240'000 chars) using javascript. I'm using ajax to retrieve json data from a servlet. The code I'm using works fine with smaller samples but just throws this out when xmlHttp.responseText contains a lot of json data.
Uncaught SyntaxError: Unexpected token ILLEGAL
mycallbackFunction
xmlHttp.onreadystatechange
It says that the unexpected token is on the line containing
var data = eval('(' + xmlHttp.responseText + ')');
This is the gist of the code:
getJsonData(mycallbackFunction, parameters);
function getJsonData(callbackFunction, parameters){
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', servlet_url + parameters, true);
xmlHttp.onreadystatechange = function(){
callbackFunction(xmlHttp);
}
xmlHttp.setRequestHeader('Content-Type', 'application/json');
xmlHttp.send(null);
}
function mycallbackFunction(xmlHttp){
var data = eval('(' + xmlHttp.responseText + ')');
}
The method that uses eval() is called from xmlHttp.onreadystatechange if that makes any difference.
I also tried using json2.js and a get the same result, it works fine with smaller json samples but when I try with my 240k chars file it says:
Uncaught #<Object>
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
//
为了确保 JSON 解析器在不提供解析器的浏览器中可用(咳嗽 IE 咳嗽),您应该包含 Douglas Crockford 的 json2.js 在您的页面上位于其他脚本之前。
如果解析器对您的数据出错,您应该通过 http://jsonlint.com/ 之类的方式验证 JSON 是否存在问题。如果需要,您应该将数据分解为更小的块以供验证站点使用。
另外,为了确保您的 JSON 有效,您应该在服务器上使用正确的 JSON 序列化方法,而不是通过 echo、prints 等“手动”输出。
You should use
To ensure a JSON parser is available in browsers which do not provide one (cough IE cough), you should include Douglas Crockford's json2.js on your page ahead of other scripts.
If the parser errors on your data, you should validate the JSON for problems via something like http://jsonlint.com/ . If you need, you should break your data down into smaller chunks for the validation site.
Also, to be sure your JSON is valid, you should be using a proper JSON serialization method at the server, rather than "manually" outputting via echos, prints, etc.