0

jQuery.parseJSON は、次の文字列では機能しません。

({"stat":"OK","code":400,"data":[{"title":"Development Convention","event_type":false,"dates_and_times":[{"date":"28\/03\/2012","start_time":"10:00 AM","end_time":"10:00 AM"},{"date":"29\/03\/2012","start_time":"10:00 AM","end_time":"10:00 AM"},{"date":"30\/03\/2012","start_time":"12:00 PM","end_time":"12:00 PM"}],"description":"<p>This event will discuss different trends in development.<\/p>\n","featured_image":"<img src=\"http:\/\/mysite.com\/pesticide-free-organic-meal.jpg\" class=\"attachment-full wp-post-image\" alt=\"bavarian food plates with chicken and wine\" title=\"bavarian food plates with chicken and wine\" \/>","image_gallery":[{"url":"http:\/\/mysite.com","alt":false}]}]})

データを受け取る場所は次のとおりです。

$.get( 
    api_url, 
    { method: "list_events", venue_id: 73, event_date: 'null' }, 
    function( data ) {
        alert(data); // Shows the above string
        var response = jQuery.parseJSON( data );
        alert(1); // Doesn't appear
        alert(response.stat); // Doesn't appear             
    }
);

なぜそれが機能しないのかについて、誰かが洞察を提供できますか? バックスラッシュを再度エスケープする必要があることをstackoverflowのどこかで読んでいました。のすべてのインスタンス\\\usingに置き換えてもdata = data.replace(/\\/g,"\\\\");、問題は解決しませんでした。

4

3 に答える 3

5

あなたの文字列は有効な JSON では(あり)ません。 と は有効ではありません。JSONP を返すようにサービスが設定されているようです。

?callback=?URL に含めて$.getJSON [docs]を使用すると、jQuery はすべての解析を適切に行います。

例:

$.getJSON(
    api_url + '?callback=?', 
    { method: "list_events", venue_id: 73, event_date: 'null' }, 
    function( data ) {
        alert(data.stat);             
    }
);

callbackは、コールバック関数名を示す標準パラメーター名ですが、サービスは別の名前を期待する場合があります。この場合は、そのドキュメントを参照してください。

詳細については、$.ajax [ドキュメント]も参照してください。


もう1つの、あまりきれいではない解決策は、括弧から開始と終了を削除することです。

var response = $.parseJSON(data.replace(/^\(|\)$/g, ''));

もちろん、サービスが同じドメインにあり、それを制御できる場合は、単純に JSON を返すことができます。

于 2012-04-08T11:50:55.990 に答える
1

よくわからない場合は、 http://jsonlint.com/でいつでも JSON を確認できます。あなたの場合、丸括弧 () は不要です (そして正しくありません)。

于 2012-04-08T11:52:10.190 に答える
0

これは json 文字列ではありません。そのオブジェクト

json は{またはで開始できます[

あなたはオブジェクトです。

于 2012-04-08T11:49:47.077 に答える