当我在chrome中运行我的页面时,我得到这个错误“uncaught syntaxerror unexpected token U”。在firefox中,我得到JSON。解析:意想不到的字符”。我从一个php文件返回json数据,返回的json字符串是有效的。我在http://jsonlint.com/上查过。任何帮助都将不胜感激。谢谢。

这是返回的JSON字符串

[
    ["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"]
]

当前回答

这个答案可以是许多可能的解决方案。这个答案是为那些在使用文件上传时面临此错误的人。

我们正在使用中间件进行基于令牌的加密-解密,我们遇到了同样的错误。

下面是路由文件中的代码:

  router.route("/uploadVideoMessage")
  .post(
    middleware.checkToken,
    upload.single("video_file"),
    videoMessageController.uploadVideoMessage
  );

在这里,我们在上传函数之前调用中间件,这导致了错误。所以当我们把它改成这个时,它起作用了。

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );

其他回答

解决这个错误非常简单。

原因。 Javascript会给出这个错误,因为你解析的是空字符串、对象或数组。

决议 因此,要解决这个问题,只需检查您试图解析的字符串是否为空/null或不是。 如果不是空/null,可以解析该字符串。

let ParsedString;

if(yourString != null){
   ParsedString = JSON.parse(yourString);
}

这个答案可以是许多可能的解决方案。这个答案是为那些在使用文件上传时面临此错误的人。

我们正在使用中间件进行基于令牌的加密-解密,我们遇到了同样的错误。

下面是路由文件中的代码:

  router.route("/uploadVideoMessage")
  .post(
    middleware.checkToken,
    upload.single("video_file"),
    videoMessageController.uploadVideoMessage
  );

在这里,我们在上传函数之前调用中间件,这导致了错误。所以当我们把它改成这个时,它起作用了。

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );

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

因此,如果你在JSONArrays中做任何事情,你不确定数据源及其完整性,我认为在这种情况下处理null和未定义异常是一个好习惯。

我通过检查JSONArray上find的返回值是否为空并适当地处理异常来修复它。

我想这可能会有帮助。

这不是一项困难的任务。这个问题也发生在我的网站,你应该转移你的js文件顶部排序。因为在你使用JSON解析的地方,这一次你的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>

以防你不明白

例如,让我们说我有一个JSON字符串..还不是json对象或数组。

所以如果在javascript你解析字符串为

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;

上面的回答很棒