JQuery для анализа JSON - PullRequest
       8

JQuery для анализа JSON

2 голосов
/ 23 февраля 2010

Я пытаюсь проанализировать JSON, возвращенный из SocialMention.

Вот пример того, как выглядит JSON:

{"title":"Social Mention","count":100,"items":[{"title":"RT @Jason_IIATMS: More Damon-isms that'll make you wanna puke: \"Let's hope the Chinese are right when they say this is the year of the tiger!\"","description":"","link":"http:\/\/twitter.com\/NYBD\/statuses\/9495530392","timestamp":1266876271,"image":null,"embed":null,"user":"NYBD","user_image":"http:\/\/a1.twimg.com\/profile_images\/60347208\/155135_logo_final_normal.jpg","user_link":"http:\/\/twitter.com\/NYBD","user_id":3265448,"source":"twitter","favicon":"http:\/\/twitter.com\/favicon.ico","type":"microblogs","domain":"twitter.com","id":"6111418866093918428"},

Я использую .getJson в jquery, например:

$.getJSON("Home/GetSocialMentionData", function (data) {
    $.each(data.items, function (i, item) {
        alert(i);
    });
});

Я, очевидно, что-то делаю неправильно, потому что я никогда не добираюсь до alert(i) и часто получаю ошибку JavaScript "Ошибка времени выполнения Microsoft JScript: 'length' равна нулю или не является объектом"

Я совершенно новичок в JSON и, похоже, ничего не могу найти, пока гуглю по этому поводу.

Итак, мой вопрос: как мне проанализировать результаты? Любой полезный совет был бы великолепен.

Ответы [ 5 ]

5 голосов
/ 23 февраля 2010

Начиная с jQuery 1.4+, ваш JSON должен быть действительным, и я имею в виду полностью действительным. Вы можете проверить свой JSON , используя JSONLint здесь .

Судя по тому, что вы опубликовали, оно недействительно ... но выглядит как фрагмент, поэтому введите свой полный результат и посмотрите, есть ли у вас какие-либо ошибки.

3 голосов
/ 23 февраля 2010

вместо $ .getJSON, выполните классический вызов AJAX и укажите тип как JSON:

$.ajax({
    type: "GET",
    url: "Home/GetSocialMentionData",
    dataType: "json",
    success: function (data) {
        // parsed json
    }
})

EDIT

Если проблема не исчезнет, ​​я рекомендую использовать JSON парсер и напрямую вызывать var obj = JSON.parse(data) в вашей функции успеха. Если это не удается, у вас определенно есть проблема с вашим текстом JSON

1 голос
/ 23 февраля 2010

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

Я бы предложил использовать Firebug (или аналогичный отладчик в браузере), чтобы установить точку останова внутри обратного вызова перед $ .each () и проверить, что на самом деле возвращается. Похоже, data.items не существует или не является массивом.

1 голос
/ 23 февраля 2010

Это может ничего не делать, но действительно ли у него есть последний "," в конце вашей строки json? Это может привести в бешенство метод getJSON ...

РЕДАКТИРОВАТЬ: При дальнейшей проверке ваш JSON недействителен. Вы можете проверить это здесь http://json.parser.online.fr/

Редактировать: Хорошо, как насчет этого

$.getJSON("Home/GetSocialMentionData", function(data) {
    for (var itemIndex in data.items) {
        var item = data.items[itemIndex];
        alert(item);
    }
});

Это может быть просто

$.getJSON("Home/GetSocialMentionData", function(data) {
    for (var itemIndex in data) {
        var item = data[itemIndex];
        alert(item);
    }
});

Не видя остального, трудно сказать, но попробуйте и посмотрите, не получите ли вы предупреждение.

Для дальнейшего использования вы также можете использовать метод JSON.stringify (string), чтобы выяснить, что содержит строка json (или почти любой объект по этому вопросу). Попробуйте :-)

0 голосов
/ 23 февраля 2010

Я решил эти проблемы в прошлом, используя функцию AJAX http://api.jquery.com/jQuery.ajax/ в jQuery вместо getJSON.

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