парсинг JSON с использованием jquery - PullRequest
4 голосов
/ 18 декабря 2010

Я пытаюсь разобрать простой файл JSON.Я очень новичок в JavaScript, JSON и JQuery.Я хотел бы извлечь информацию из файла JSON, чтобы я мог построить ее позже, используя protovis.Мой JSON правильно сформирован и проверяется в JSON lint .

Я пытаюсь сделать это путем анализа responseText объекта JSON, например:

var json = $.getJSON("week_13.json").responseText;
var week13 = $.parseJSON(json);

в надежде, что Week13 - это то, к чему я могу получить доступ.Просто чтобы заметить, я не пытаюсь использовать функцию обратного вызова в вызове $.getJSON, так как я хотел бы просто иметь доступ к переменным, чтобы я мог построить их позже.

Я использую Chrome и его консоль, чтобы попытаться выяснить, что происходит.В этом коде переменная json представляется пустой строкой.Однако, если я пишу в консоли javascript в Chrome:

var json = $.getJSON("week_13.json");

json - это объект XMLHttpRequest, а его атрибут responseText - это большая строка, содержащая мой JSON.

var text = json.responseText;

- хорошая строка, и затем, если я вызываю парсер jquery

var data = $.parseJSON(text);

, тогда data - это объект, который я хотел.Однако, если я скопирую и вставлю свои две исходные строки в консоль, мне не повезет, и если я использую расширенную версию из переменных json, text и data на исходной веб-странице, это не сработает:

var json = $.getJSON("week_13.json");
var text = json.responseText;
var data = $.parseJSON(json);

В этом случае text - пустая строка.

Я в полном замешательстве.Если бы кто-нибудь мог сообщить мне, что я делаю неправильно, и дать несколько советов о том, как сделать эту работу, я был бы очень счастлив!Пожалуйста, дайте мне знать, если какая-либо другая информация о том, как я поступаю, необходима для ответа на вопрос!

Ответы [ 3 ]

8 голосов
/ 18 декабря 2010

$.getJSON() является асинхронным. Вам нужно предоставить функцию обратного вызова для обработки результата. См. API doc для примеров функций обратного вызова.

Если вам действительно нужен синхронный вызов (он заблокирует браузер, пока вы ожидаете результата), вы можете сделать это вместо этого:

var url = "week_13.json"
var data = jQuery.parseJSON(
        jQuery.ajax({
            url: url, 
            async: false,
            dataType: 'json'
        }).responseText
    );
0 голосов
/ 18 декабря 2010
Функция

$.getJSON делает все вызовы asynchronously по умолчанию, поэтому эта функция ничего не возвращает.хотя есть параметр этой функции, который принимает callback и возвращает данные в функцию обратного вызова.см. пример ниже.

Другая проблема синхронизации потока программы может быть решена путем остановки всех ваших функций перед вызовом getJSON, а затем возобновления работы при получении данных в обратном вызове.

Вы также можете использовать глобальную переменную для хранения json и использовать в любом месте программы.

var json = null; // the global variable to store json returned from file

// stop all your work here. 
// I mean do not perform any more actions here.

// make an ajax call to get the json data
$.getJSON('week_13.json', function (jsonData) {

    // assign the data to global json variable.
    json = jsonData;


    // now call your other function to manipulate json
    // now resume your work here, 
    // and perform other actions which are dependent on json.

});
0 голосов
/ 18 декабря 2010

В $ .getJSON вам не нужно вызывать parseJSON при использовании полного параметра. Я использую это так:

 $.getJSON('myjson.json', null, function (json_object) {
      // here it is already a json_object
      alert(json_object.text);
   });

$ .getJSON уже анализирует responseText в объект JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...