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 [docs]以获取更多信息。


另一个但不太干净的解决方案是从括号中修剪开头和结尾:

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 可以以{or开头[

你是一个对象。

于 2012-04-08T11:49:47.077 回答