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 + ')');
}

使用 eval() 的方法是从 xmlHttp.onreadystatechange 调用的,如果这有什么不同的话。

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

Uncaught #<Object>

提前致谢。

4

1 回答 1

1

你应该使用

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

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

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

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

于 2011-06-08T14:02:35.363 回答