未捕获的语法错误意外的令牌U JSON

当我在chrome中运行我的页面时,出现这个错误“uncaught syntaxerror unexpected token U”。 而在Firefox中,我得到“JSON.parse:意想不到的字符”。 我从PHP文件返回json数据,返回的jsonstring是有效的。 我用http://jsonlint.com/检查了它。 任何帮助将不胜感激…谢谢。

这是返回的JSONstring

[ ["1","Pan Africa Market","\"1521 1st Ave, Seattle, WA\"","47.608941","-122.340145","restaurant"], ["2","The Melting Pot","14 Mercer St, Seattle, WA","47.624562","-122.356442","restaurant"], ["3","Ipanema Grill","1225 1st Ave, Seattle, WA","47.606366","-122.337656","restaurant"], ["4","Sake House","230 1st Ave, Seattle, WA","47.612825","-122.34567","bar"], ["5","Crab Pot","1301 Alaskan Way, Seattle, WA","47.605961","-122.34036","restaurant"], ["6","Mexican Kitchen","2234 2nd Ave, Seattle,WA","47.613975","-122.345467","bar"], ["7","Wingdome","1416 E Olive Way, Seattle, WA","47.617215","-122.326584","bar"], ["8","Piroshky Piroshky","1908 Pike pl, Seattle, WA","47.610127","-122.342838","restaurant"] ] 

当给JSON.parse的值实际上是undefined时,通常会看到这个错误。 所以,我会检查试图parsing这个代码 – 很可能你不parsing这里显示的实际string。

在validation时(在MVC项目中),我得到了这个消息。 对我来说,添加ValidationMessageFor元素修复了这个问题。

确切地说,jquery.validate.unobtrusive.js中的行号43导致了这个问题:

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false; 

这种错误发生的最常见的情况是使用模板生成的控制,然后改变方式id和/或name正在生成'重写'默认模板类似

 @Html.TextBoxFor(m => m, new {Name = ViewData["Name"], id = ViewData["UniqueId"]} ) 

然后忘记将ValidationMessageFor更改为

 @Html.ValidationMessageFor(m => m, null, new { data_valmsg_for = ViewData["Name"] }) 

希望这可以为你节省一些时间。

在我的情况下,它试图在XHRResponse返回之前调用AJAXvariables的JSON.parse()。 例如:

 var response = $.get(URL that returns a valid JSON string); var data = JSON.parse(response.responseText); 

我用jQuery站点中的$ .getreplace了一个例子:

 <script type="text/javascript"> var jqxhr = $.get( "https://jira.atlassian.com/rest/api/2/project", function() { alert( "success" ); }) .done(function() { //insert code to assign the projects from Jira to a div. jqxhr = jqxhr.responseJSON; console.log(jqxhr); var div = document.getElementById("products"); for (i = 0; i < jqxhr.length; i++) { console.log(jqxhr[i].name); div.innerHTML += "<b>Product: " + jqxhr[i].name + "</b><BR/>Key: " + jqxhr[i].key + "<BR/>"; } console.log(div); alert( "second success" ); }) .fail(function() { alert( "error" ); }) .always(function() { alert( "finished" ); }); // Perform other work here ... // Set another completion function for the request above jqxhr.always(function() { alert( "second finished" ); }); </script> 

这不是一件困难的事情。 这个问题也发生在我的网站,你应该不得不移动您的js文件顶部命令。 因为在你使用JSONparsing的地方,这次你的JS文件没有加载。 示例#

 <script type="text/javaScript"> ...........SOME CODE............. </script> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 

改成

 <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script type="text/javaScript"> ...........SOME CODE............. </script> 

当我在for循环中的JSONArray上运行查找条件时遇到此错误。 我遇到的问题是返回null的for循环中的一个值的结果。 因此,当我试图访问一个属性,它失败了。

所以如果你在JSONArray中做任何你不确定数据源及其完整性的事情,我认为在这种情况下处理空和未定义的exception是一个好习惯。

我通过检查JSONArray上的find的返回值来检查null并正确处理exception来修复它。

认为这可能有帮助。

考虑使用

 eval("("+your_json_var+")"); 

这远远好于$ .parseJSON()

只要你不明白

例如,可以让我说我有一个JSON STRING ..不是一个JSON对象或arrays。

所以如果在JavaScript中parsingstring为

 var body={ "id": 1, "deleted_at": null, "open_order": { "id": 16, "status": "open"} var jsonBody = JSON.parse(body.open_order); //HERE THE ERROR NOW APPEARS BECAUSE THE STRING IS NOT A JSON OBJECT YET!!!! //TODO SO var jsonBody=JSON.parse(body)//PASS THE BODY FIRST THEN LATER USE THE jsonBody to get the open_order var OpenOrder=jsonBody.open_order; 

上面的好答案

我得到这个错误,当我使用相同的variables的JSONstring和parsing的JSON:

 var json = '{"1":{"url":"somesite1","poster":"1.png","title":"site title"},"2":{"url":"somesite2","poster":"2.jpg","title":"site 2 title"}}' function usingjson(){ var json = JSON.parse(json); } 

我改变了function:

 function usingjson(){ var j = JSON.parse(json); } 

现在这个错误消失了。