Javascript JSON.Parse,';未捕获的语法错误:意外标记o
我在处理从web服务返回的JSON时遇到问题。看起来JSON缺少引号,但是当我向JSON添加引号时,我得到了一个错误。以下是错误消息:“未捕获的SyntaxError:意外的令牌o。将字符串记录到控制台时:[object],[object] 下面是一些模拟错误的示例代码:Javascript JSON.Parse,';未捕获的语法错误:意外标记o,javascript,json,Javascript,Json,我在处理从web服务返回的JSON时遇到问题。看起来JSON缺少引号,但是当我向JSON添加引号时,我得到了一个错误。以下是错误消息:“未捕获的SyntaxError:意外的令牌o。将字符串记录到控制台时:[object],[object] 下面是一些模拟错误的示例代码: //Error I am trying to solve var jsonString = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]'; var myData
//Error I am trying to solve
var jsonString = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]';
var myData = JSON.parse(jsonString);
$(document).ready(function() {
var $grouplist = $('#groups');
$.each(myData, function() {
$('<li>' + this.Name + '</li>').appendTo($grouplist);
});
});
//我试图解决的错误
var jsonString='[{“Id”:“10”,“Name”:“Matt”},{“Id”:“1”,“Name”:“Rock”}]';
var myData=JSON.parse(jsonString);
$(文档).ready(函数(){
var$grouplist=$(“#组”);
$.each(myData,function(){
$(“”+this.Name+“ ”).appendTo($grouplist);
});
});
下面是相同的代码,字符串周围有单引号。它起作用了
//Successful Javascript
var jsonString = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]';
var myData = JSON.parse(jsonString);
$(document).ready(function() {
var $grouplist = $('#groups');
$.each(myData, function() {
$('<li>' + this.Name + '</li>').appendTo($grouplist);
});
});
//Successful HTML
<ul id="groups"></ul>
//成功的Javascript
var jsonString='[{“Id”:“10”,“Name”:“Matt”},{“Id”:“1”,“Name”:“Rock”}]';
var myData=JSON.parse(jsonString);
$(文档).ready(函数(){
var$grouplist=$(“#组”);
$.each(myData,function(){
$(“”+this.Name+“ ”).appendTo($grouplist);
});
});
//成功的HTML
但是,当我尝试向字符串添加引号时,就像我在实际代码中似乎需要的那样,它失败了:
//Does not work when I need to append quotes to the string:
var jsonStringNoQuotes = [{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}];
jsonStringQuotes = "'" + jsonStringNoQuotes + "'";
var myData = JSON.parse(jsonStringQuotes);
$(document).ready(function() {
var $grouplist = $('#groups');
$.each(myData, function() {
$('<li>' + this.Name + ',' + this.Id + '</li>').appendTo($grouplist);
});
});
//需要在字符串中添加引号时不起作用:
var jsonStringNoQuotes=[{“Id”:“10”,“Name”:“Matt”},{“Id”:“1”,“Name”:“Rock”}];
jsonStringQuotes=“””+jsonStringNoQuotes+“”;
var myData=JSON.parse(jsonStringQuotes);
$(文档).ready(函数(){
var$grouplist=$(“#组”);
$.each(myData,function(){
$(“”+this.Name+,“+this.Id+” ).appendTo($grouplist);
});
});
以下是错误:
控制台的日志字符串:[对象],[对象]
data.js:809未捕获的语法错误:意外标记'
我被难住了。感谢您的帮助!谢谢大家! 上一个示例是无效的JSON。JSON中不允许使用单引号,字符串内部除外。在第二个示例中,单引号不在字符串中,而是用于显示开始和结束 有关规格,请参阅 应该补充:为什么你会这样认为:“就像我在我的真实代码中似乎需要这样做”?也许我们可以帮你想出解决办法
var jsonStringNoQuotes = [{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}];
它将创建json对象。不需要解析
jsonStringQuotes = "'" + jsonStringNoQuotes + "'";
将返回“[object]”
这就是它(下面)导致错误的原因
var myData = JSON.parse(jsonStringQuotes);
可能来自服务器的内容已经作为JSON对象进行了评估?例如,使用方法:
但在这种情况下,我不明白为什么不能直接引用
json
变量,而不是字符串化和解析。如果没有单引号,您将创建一个包含两个对象的数组。这是JavaScript自己的语法。添加引号时,该对象(数组+2个对象)现在是一个字符串。您可以使用JSON.parse
将字符串转换为JavaScript对象。不能使用JSON.parse
将JavaScript对象转换为JavaScript对象
//String - you can use JSON.parse on it
var jsonStringNoQuotes = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]';
//Already a javascript object - you cannot use JSON.parse on it
var jsonStringNoQuotes = [{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}];
此外,上一个示例失败,因为您正在向JSON字符串添加文字单引号字符。这是违法的。JSON规范规定只允许双引号。如果要console.log
console.log("'"+[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]+"'");
//Logs:
'[object Object],[object Object]'
您将看到它返回数组的字符串表示形式,该数组转换为逗号分隔的列表,每个列表项都是对象的字符串表示形式,即[object object]
。记住,javascript中的关联数组只是对象,每个键/值对都是一个属性/值
为什么会发生这种情况?因为您是从一个字符串“'”
开始的,所以您试图将数组附加到该字符串,该数组请求它的字符串表示形式,然后您将附加另一个字符串“'”
请不要混淆JSON和Javascript,因为它们是完全不同的东西。JSON是一种人类可读的数据格式,旨在与创建javascript对象时使用的语法相匹配。JSON是一个字符串。Javascript对象不是,因此当在代码中声明时,不会用引号括起来
看这把小提琴:
jaon PARSE take string作为参数这些代码片段肯定会产生错误,但我认为您看到的是错误的。您可以发布从服务器检索JSON字符串的代码吗?您的第一个代码示例没有模拟这个问题。你具体问的是哪一个。你的上一个肯定是不正确的。你需要发布一些实际的数据和代码。请在你的文件中添加json2.js并重试。这为我解决了同样的问题。我不认为将数组包装为单引号将为你提供该数组的字符串文字。它会给你类似于
'[object],[object]'
的东西,这显然没有解析的意义。使用JSON.stringify
。这就是我要说的。。请再次阅读我的答案,我在“无需解析”中漏掉了“否”(这里是清晨)。您可能应该更正'[object]'
输出,因为这不是这个特定数组的表示方式(很抱歉,太迂腐了,但如果您所写的内容实际上是他们自己可以发现的内容,那么它只会让人们更容易理解您的解决方案)。我已经研究了几个小时相同的问题。谢谢你提供的信息。我很难将单引号添加到JSON字符串中,因为它位于数据属性中。我在做JSON.parse之前先做了一个JSON.stringify解决了这个问题。和这里的人一样,我在那里浪费了一个小时,然后终于找到了这个简单、清晰的解释,谢谢!非常感谢,我也面临着同样的问题。解决了的now@user3754676您的JSON可能无效(例如,缺少双引号)。您可以使用
//String - you can use JSON.parse on it
var jsonStringNoQuotes = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]';
//Already a javascript object - you cannot use JSON.parse on it
var jsonStringNoQuotes = [{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}];
console.log("'"+[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]+"'");
//Logs:
'[object Object],[object Object]'