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

时间:2011-06-08 13:45:17

标签: javascript json parsing eval onreadystatechange

我正在尝试使用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 + ')');
}

使用eval()的方法是从xmlHttp.onreadystatechange调用的,如果这有任何区别的话。

我也尝试过使用json2.js得到相同的结果,它适用于较小的json样本,但是当我尝试使用我的240k字符文件时,它说:

Uncaught #<Object>

提前致谢。

1 个答案:

答案 0 :(得分:1)

你应该使用

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

为了确保JSON解析器在没有提供JSON解析器( cough IE cough )的浏览器中可用,您应该包含Douglas Crockford的{{3}在你的页面之前的其他脚本。

如果解析器在您的数据上出错,您应该通过json2.js之类的内容验证JSON的问题。如果需要,您应该将数据分解为验证站点的较小块。

另外,为了确保您的JSON有效,您应该在服务器上使用正确的JSON序列化方法,而不是&#34;手动&#34;通过回声,打印等输出