当我在chrome中运行我的页面时,我收到此错误“未捕获的syntaxerror意外标记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"]
]
答案 0 :(得分:589)
当JSON.parse
的值实际为undefined
时,通常会看到该错误。
所以,我会检查试图解析它的代码 - 很可能你没有解析这里显示的实际字符串。
答案 1 :(得分:13)
我在验证时收到此消息(在MVC项目中)。 对我来说,添加 ValidationMessageFor 元素可以解决问题。
准确地说,jquery.validate.unobtrusive.js中的第43行引起了这个问题:
replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;
答案 2 :(得分:4)
发生此错误的最常见情况是使用生成控件的模板,然后通过“覆盖”默认模板更改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 :(得分:1)
在我的情况下,它试图在XHRResponse回来之前在AJAX变量上调用JSON.parse()。 EG:
var response = $.get(URL that returns a valid JSON string);
var data = JSON.parse(response.responseText);
我用jQuery site for $.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>
答案 4 :(得分:1)
我在for循环中的JSONArray上运行查找条件时遇到此错误。我遇到的问题是for循环中的一个值返回null的结果。因此,当我试图访问一个属性时,它失败了。
因此,如果你在JSONArrays中做任何你不确定数据源及其完整性的事情,我认为在这种情况下处理null和undefined异常是一个好习惯。
我通过检查JSONArray上的find的返回值并适当处理异常来修复它。
认为这可能会有所帮助。
答案 5 :(得分:1)
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)
什么也没返回!
答案 6 :(得分: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
);
答案 7 :(得分: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>
答案 8 :(得分:0)
好吧,对于所有实际上在您的代码中的任何地方都找不到错误的人,无论是“在本地存储中未定义的错误还是null”。本地存储..之后,您可以注释或删除当前代码,然后只需取消注释即可再次重置上一个代码(如果dint删除了...如果您做了,您可以再次编写它:))
LocalStorage.setItem('Previous' , "removeprevious");
LocalStorage.removeItem('Previous');
Console.log(LocalStorage.getItem('Previous'));
控制台将显示null,并且如果t不起作用,则再次重置您的代码,伙计!您出错了。
对不起,我的英语!
答案 9 :(得分:0)
解决该错误非常简单。
原因。 Javascript 给出该错误是因为您正在解析空字符串、对象或数组。
分辨率 所以要解决这个问题,只需检查您尝试解析的字符串是否为空/null 或者不是。 如果不是空/空,您可以解析该字符串。
let ParsedString;
if(yourString != null){
ParsedString = JSON.parse(yourString);
}
答案 10 :(得分:-1)
只是因为你不明白
例如,假设我有一个JSON STRING ..不是JSON OBJECT或ARRAY。
所以如果在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;
上面的好答案
答案 11 :(得分:-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);
}
现在这个错误消失了。