Проблема разбора большого JSON с использованием Eval и альтернативных
Я пытаюсь проанализировать большой файл 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 ответ
Вы должны использовать
var data = JSON.parse( xmlHttp.responseText );
Чтобы гарантировать, что анализатор JSON доступен в браузерах, которые его не предоставляют (кашель IE, кашель), вы должны включить json2.js Дугласа Крокфорда на свою страницу, прежде чем другие сценарии.
Если анализатор ошибается в ваших данных, вы должны проверить JSON на наличие проблем с помощью чего-то вроде http://jsonlint.com/. Если вам нужно, вы должны разбить ваши данные на более мелкие куски для сайта проверки.
Кроме того, чтобы убедиться, что ваш JSON действителен, вы должны использовать правильный метод сериализации JSON на сервере, а не "вручную" выводить через эхо, распечатки и т. Д.