我遇到了从Web服务返回的JSON的问题.看起来JSON缺少引号,但是当我向JSON添加引号时,我收到错误.以下是错误消息:'Uncaught SyntaxError:Unexpected token o.当我将字符串记录到控制台时:[object Object],[object Object]
以下是一些模拟错误的示例代码:
//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);
});
});
Run Code Online (Sandbox Code Playgroud)
这是与字符串周围的单引号相同的代码.有用
//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>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在字符串中添加引号时,就像我似乎需要在我的实际代码中一样,它失败了:
//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);
});
});
Run Code Online (Sandbox Code Playgroud)
这是错误:登录控制台的日志字符串:[object Object],[object Object] data.js:809 Uncaught SyntaxError:Unexpected token'
我很难过.任何帮助赞赏!谢谢!
fla*_*rld 65
如果没有单引号,您将创建一个包含两个对象的数组.这是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"}];
Run Code Online (Sandbox Code Playgroud)
此外,您的上一个示例失败,因为您要将文字单引号字符添加到JSON字符串.这是非法的.JSON规范声明只允许双引号.如果你是console.log以下......
console.log("'"+[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]+"'");
//Logs:
'[object Object],[object Object]'
Run Code Online (Sandbox Code Playgroud)
你会看到它返回数组的字符串表示形式,它被转换为逗号分隔列表,每个列表项都是对象的字符串表示形式,即[object Object].请记住,javascript中的关联数组只是对象,每个键/值对都是属性/值.
为什么会这样?因为你是从一个字符串开始的"'",所以你试图将数组附加到它,它请求它的字符串表示,然后你附加另一个字符串"'".
请不要将JSON与Javascript混淆,因为它们完全不同.JSON是一种人类可读的数据格式,旨在匹配创建javascript对象时使用的语法.JSON是一个字符串.Javascript对象不是,因此在代码中声明时不会用引号括起来.
看到这个小提琴:http: //jsfiddle.net/NrnK5/
| 归档时间: |
|
| 查看次数: |
143904 次 |
| 最近记录: |