2

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

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 имеет ожидаемый контент.

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

ответ

3

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

http://api.flickr.com/services/feeds/photos_public.gne?format=json&nojsoncallback=1 
+0

Вы правы! Я не знаю столько о JSON, как я думал. Интересно, что даже с параметром nojsoncallback я получаю недопустимый символ. Я получил несколько советов в Twitter, чтобы запустить его через валидатор JSON, и вот и вот, в ответе есть действительно недопустимые символы! Итак, проблема решена, но проблема двух возникает. Спасибо за информацию. Я кое-что узнал. –

+0

Это странно, это сработало для меня, когда я попробовал это как с JSON.NET, так и с вашим кодом в WinJS. – svick

+0

Время основано. Если в нем есть комментарий с странным символом, то он терпит неудачу. Я просто получил его, чтобы потерпеть неудачу, а затем работать, а затем потерпеть неудачу. Интересно. Должен найти лучший демо-URL, я думаю. –

4

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

var cleansed = result.responseText.replace(/\\'/g, "'"); 
var photoData = JSON.parse(cleansed).d; 
+0

Да! Ты мой герой. Я искал решение ужасного JSON, которое я получил от Flickr, и это все! Я не могу понять, почему они предоставляют нам такой перепутанный JSON. – Decor

+1

На всякий случай кто-то другой ударяет это для других языков - в ObjC код очистки: NSString * cleanString = [respString stringByReplacingOccurrencesOfString: @ "\\ '" withString: @ "'"]; –