uncaught syntaxerror意外令牌U JSON

当我在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"]
]
451928 次浏览
当赋给JSON.parse的值实际上是undefined时,通常会看到该错误。 所以,我会检查试图解析这个的代码-很可能你不是在解析这里显示的实际字符串

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

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

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

这种错误发生的最常见情况是使用模板生成控件,然后通过“覆盖”默认模板来更改生成id和/或__abc1的方式

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

然后忘记将ValidationMessageFor改为

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

希望这能为您节省一些时间。

在我的例子中,它试图在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>

以防你不明白

例如,让我们说我有一个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;

上面的回答很棒

这不是一个困难的任务。这个问题也发生在我的网站,你应该转移你的js文件顶部排序。因为在你使用JSON解析的地方,这一次你的JS文件没有被加载。 例# < / p >
<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运行find条件时,我遇到了这个错误。我遇到的问题是for循环中的一个值返回null的结果。因此,当我试图访问一个属性,它失败了。

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

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

我想这可能会有帮助。

我得到这个错误,当我使用相同的变量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);
}

现在这个错误消失了。

好吧,对于那些实际上在你的代码中任何地方都找不到错误的人,既不是“在本地存储中未定义也不是null”。简单地只是注释掉你的代码,并编写另一个实际删除本地存储项。在那之后,你可以注释或删除当前的代码,并通过简单地取消注释来重新设置之前的代码(如果你不删除t…如果你写过,你可以再写一遍:)

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




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

控制台将显示null,并且它..如果t不起作用,请重新设置代码!你有错误。

对不起我的英语!

JSON的参数。parse可能什么也不返回(即JSON的值)。解析是undefined)!

它发生在我从xyz解析已编译的固体代码时。索尔文件。

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)

什么也没回!

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

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

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

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

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

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

解决这个错误非常简单。

< p > 的原因。 Javascript会给出这个错误,因为你正在解析空字符串,对象或数组

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

let ParsedString;


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

您应该考虑尝试在服务器端解析数据,然后将其发送到客户端进行处理。