使用 eval 和替代方案解析大 json 时出现问题

发布于 2024-11-14 14:39:53 字数 1089 浏览 2 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

回忆凄美了谁 2024-11-21 14:39:53

//

var data = JSON.parse( xmlHttp.responseText );

为了确保 JSON 解析器在不提供解析器的浏览器中可用(咳嗽 IE 咳嗽),您应该包含 Douglas Crockford 的 json2.js 在您的页面上位于其他脚本之前。

如果解析器对您的数据出错,您应该通过 http://jsonlint.com/ 之类的方式验证 JSON 是否存在问题。如果需要,您应该将数据分解为更小的块以供验证站点使用。

另外,为了确保您的 JSON 有效,您应该在服务器上使用正确的 JSON 序列化方法,而不是通过 echo、prints 等“手动”输出。

You should use

var data = JSON.parse( xmlHttp.responseText );

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文