Проблема разбора большого JSON с использованием Eval и альтернативных - PullRequest
0 голосов
/ 08 июня 2011

Я пытаюсь проанализировать большой файл json (240'000 символов), используя javascript. Я использую AJAX для получения данных 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 chars, он говорит:

Uncaught #<Object>

Заранее спасибо.

1 Ответ

1 голос
/ 08 июня 2011

Вы должны использовать

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

Чтобы обеспечить доступность JSON-анализатора в браузерах, которые его не предоставляют ( кашель IE кашель ), необходимо включить json2.js Дугласа Крокфорда на вашей странице впереди других сценариев.

Если анализатор выдает ошибки в ваших данных, вы должны проверить JSON на наличие проблем с помощью чего-то вроде http://jsonlint.com/.Если вам нужно, вы должны разбить данные на более мелкие куски для сайта проверки.

Кроме того, чтобы убедиться, что ваш JSON действителен, вы должны использовать правильный метод сериализации JSON на сервере, а не "вывод вручную через эхо, распечатки и т. д.

...