Анализ фида данных приводит к ошибке недопустимого символа в WinJS.

Я вызываю поток данных Flickr в WinJS для приложения Windows 8 Metro. Когда я пытаюсь проанализировать ответ фида с помощью JSON.parse, я получаю сообщение об ошибке Invalid Character. Вот мой код:

function processPhotos(result)
{
    var photoData = JSON.parse(result.responseText);
    //bind here
    data.items.forEach(function (item) {
        list.push(item);
    });
}

function processError(error) {
    console.log(error.message);
}

WinJS.xhr({ url: "http://api.flickr.com/services/feeds/photos_public.gne?format=json" }).then(processPhotos, processError);
WinJS.Namespace.define("data", {
    items: groupedItems,
    groups: groupedItems.groups,
    getItemsFromGroup: getItemsFromGroup
});

Result.ResponseText имеет ожидаемое содержимое.

Кто-нибудь еще сталкивается с этим?


person Bill Sempf    schedule 13.03.2012    source источник


Ответы (2)


Если вы посмотрите на данные, то заметите, что это не JSON, а JSONP. Вот почему JSON.parse() не может его обработать. Если вам нужен обычный JSON, согласно документации, вам следует использовать nojsoncallback=1 :

http://api.flickr.com/services/feeds/photos_public.gne?format=json&nojsoncallback=1
person svick    schedule 13.03.2012
comment
Ты прав! Я не так много знаю о JSON, как думал. Интересно, что даже с параметром nojsoncallback я получаю неверный символ. Я получил совет в Твиттере, чтобы запустить его через валидатор JSON, и о чудо, в ответе действительно есть недопустимые символы! Итак, проблема номер один решена, но возникает проблема номер два. Но спасибо за информацию. Я кое-что узнал. - person Bill Sempf; 13.03.2012
comment
Это странно, у меня это сработало, когда я попробовал это как с JSON.NET, так и с вашим кодом в WinJS. - person svick; 13.03.2012
comment
Он основан на времени. Если в нем есть комментарий со странным символом, то он терпит неудачу. Я просто получил это, чтобы потерпеть неудачу, затем работать, а затем потерпеть неудачу. Интересно. Я думаю, нужно найти лучший демонстрационный URL. - person Bill Sempf; 13.03.2012

Мне пришлось сделать это, чтобы удалить некоторые недопустимые символы в responseText. (предложено мне https://stackoverflow.com/users/200698/devhammer)

var cleansed = result.responseText.replace(/\\'/g, "'");
var photoData = JSON.parse(cleansed).d;
person Chadit    schedule 23.08.2012
comment
Да! Ты мой герой. Я искал решение для ужасного JSON, который я получил от Flickr, и это оно! Я не могу понять, почему они предоставляют нам такой испорченный JSON. - person Decor; 06.10.2013
comment
На всякий случай, если кто-то еще нажмет это для других языков - в ObjC код очистки: NSString *cleanString = [respString stringByReplacingOccurrencesOfString:@\\' withString:@']; - person Kendall Helmstetter Gelner; 23.08.2014