jQuery.parseJSON不适用于给定的字符串

时间:2012-04-08 11:45:23

标签: javascript jquery json parsing

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上的其他地方,反斜杠必须再次转义;使用\使用\\替换data = data.replace(/\\/g,"\\\\");的所有实例都无法解决问题。

3 个答案:

答案 0 :(得分:5)

您的字符串无效JSON,()在那里无效。看起来该服务已设置为返回JSONP。

如果在URL中包含?callback=?并使用$.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即可。

答案 1 :(得分:1)

如果您不确定可以随时使用http://jsonlint.com/检查您的json。在您的情况下,圆括号()是不必要的(并且不正确)。

答案 2 :(得分:0)

这不是一个json字符串!它的一个对象

json可以从{[

开始

你是一个对象。