2012-03-13 10 views
2

Windows 8 Metro Appの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バリデーターを使ってそれを実行するためのいくつかのアドバイスを得ました。そして、実際には応答に無効な文字があります。だから、問題1は解決しましたが、問題2は収穫します。しかし、情報をありがとう。私は何かを学んだ。 –

+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

はい!あなたは私のヒーローです。私はFlickrから受け取ったひどいJSONの解決策を探していました。これはこれです!そのようなJSONをなぜ私たちに提供しているのか理解できません。 – Decor

+1

他の人が他の言語のためにこれをヒットした場合、ObjCのクリーニングコードはNSString * cleanString = [respString stringByReplacingOccurrencesOfString:@ "\\ '" withString:@ "'"]; –

関連する問題