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,"\\\\");
的所有实例都无法解决问题。
答案 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可以从{
或[
你是一个对象。