2012-03-13 33 views
2

我正在爲Windows 8 Metro應用程序調用WinJS中的Flickr數據饋送。當我嘗試使用JSON.parse解析提要響應時,出現無效字符錯誤。這裏是我的代碼:解析數據饋送會導致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驗證器來運行它,並且看到,響應中實際上有無效的字符!所以,問題一解決了,但問題二發生了。謝謝你的信息。我學到了東西。 – 2012-03-13 17:15:35

+0

奇怪的是,當我用JSON.NET和WinJS中的代碼嘗試它時,它確實爲我工作。 – svick 2012-03-13 18:02:42

+0

它是基於時間的。如果有一個帶有奇怪角色的評論,那麼它就會失敗。我只是讓它失敗,然後工作,然後失敗。有趣。我想要找一個更好的演示網址。 – 2012-03-13 18:13:18

4

我不得不這樣做是爲了清理一些在responseText的無效字符。 (由我建議https://stackoverflow.com/users/200698/devhammer

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

是的!你是我的英雄。我一直在尋找解決我從Flickr收到的糟糕的JSON,就是這樣!我無法理解他們爲什麼向我們提供這樣搞砸的JSON。 – Decor 2013-10-06 08:59:11

+1

只是爲了防止其他語言對其他語言的訪問 - 在ObjC中,清除代碼是:NSString * cleanString = [respString stringByReplacingOccurrencesOfString:@「\\'」withString:@「'」]; – 2014-08-23 03:48:42