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


293

当我在chrome中运行页面时,出现此错误“未捕获的语法错误意外的令牌U”。在firefox中,我得到“ JSON.parse:意外字符”。我正在从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"]
]

您可以发布JSON吗?当我收到该错误时,通常会表示有一个未终止的字符串-这表明它位于JSON中的字母“ U”处。
凯尔·伯顿

输出中可能存在一些奇怪的问题\"
菲利克斯·克林

JSON解析很好。您应该尝试弄清楚您的代码实际上是如何阻塞的。
nneonneo 2012年

Answers:


646

当给定的值JSON.parse实际为时,通常会看到该错误undefined。因此,我将检查试图解析此代码的代码-最有可能您没有解析此处显示的实际字符串。


27
也可能是"undefined"字符串而不是文字undefined。我只花了30分钟就发现了这一点。
ug_ 2014年

13
@ ns47731实际上是一样的。实际未定义变为的原因uundefined被强制转换为字符串(因为字符串是JSON.parse期望的)。
肖恩·金西

10
gh,正在发送异步请求,并立即尝试解析未定义的返回值。讨厌自己,谢谢。
克里斯·特鲁多

7
此错误也将通过json字符串开头的UTF-8 {“
引发

1
我的错误是Unexpected token N in JSON at position...,问题是一个double值:NaN
Jaider

14

验证时(在MVC项目中),我收到此消息。对我来说,添加ValidationMessageFor元素可以解决此问题。

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

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

这使我走上了正确的道路。就我而言,我正在$("form :input").valid();触发验证。但是很明显,在没有ValidationMessageFor的情况下,隐藏字段上出现了错误。通过更改为$("form :input:visible").valid();
Trax72 '17

7

JSON.parse的参数可能没有返回任何值(即,给JSON.parse的值是undefined)!

当我从xyz.sol文件中解析已编译的solidity代码时,这发生在我身上。

import web3 from './web3';
import xyz from './build/xyz.json';

const i = new web3.eth.Contract(
  JSON.parse(xyz.interface),
  '0x99Fd6eFd4257645a34093E657f69150FEFf7CdF5'
);

export default i;

拼写错误为

JSON.parse(xyz.intereface)

什么也没返回!


5

发生此错误的最常见情况是使用模板,该模板先生成控件,然后更改方式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"] })    

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


3

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

因此,如果在不确定数据源及其完整性的JSONArrays中执行任何操作,我认为在这种情况下处理null和undefined异常是一个好习惯。

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

认为这可能会有所帮助。


1

就我而言,它试图在XHRResponse返回之前在AJAX变量上调用JSON.parse()。例如:

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

我用jQuery网站中的$ .get替换了一个示例:

<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>

1

万一你不明白

例如,是说我有一个JSON STRING ..还没有一个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;

上面的好答案


1

对于那些在使用“ 文件上载 ..” 时遇到此错误的人,此答案为

我们使用中间件进行基于令牌的加密-解密,并且遇到相同的错误。

以下是我们在路由文件中的代码:

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

在这里,我们在上传功能之前调用了中间件,这是导致错误的原因。因此,当我们将其更改为此时,它起作用了。

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

0

这不是一项艰巨的任务。在我的网站上也会发生该问题,您应该将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>

0

好吧,对于所有实际上在您的代码中的任何地方都找不到错误的人,无论是“未定义的错误,还是在本地的存储中都没有,也没有null”。之后,您可以注释或删除当前代码,然后只需取消注释即可再次重置上一个代码(如果您删除了t ...如果您做了,则可以再次编写:)

LocalStorage.setItem('Previous' , "removeprevious");  


LocalStorage.removeItem('Previous');   
 Console.log(LocalStorage.getItem('Previous'));

控制台将显示null,如果t不起作用,则再次重置您的代码,伙计!您遇到了错误。

对不起我的英语不好!


-3

当我对json字符串使用相同的变量并解析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 usingjson(){
    var j = JSON.parse(json);
}

现在这个错误消失了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.