在 javascript 中创建适用于大多数网络浏览器的对象的正确语法是什么(我的意思是:IE 6+、Firefox 2+、Opera 9+)
这是有效的
var a = {
"class": "Person",
"name": "William Shakespeare",
"birthday": -12802392000000,
"nickname": "Bill"
};
或者是这样的:
var a = {
class: "Person",
name: "William Shakespeare",
birthday: -12802392000000,
nickname: "Bill"
};
这两者有什么区别?
最佳答案
@AndreasN is correct : JSON specification指示使用引号以使其实际上是 JSON。如果不使用引号,它可能是 Javascript 中的有效对象文字,但不是 JSON。除浏览器端 Javascript 之外的其他服务使用 JSON(例如,使用 php、Java 等的 web 服务),如果您构造一个缺少引号的字符串,则无法保证它会被正确解析——尽管我怀疑大多数实现会是足够强大,可以这样做。
仅供引用,在 Javascript 中直接对来自无法防止恶意攻击的源的 JSON 字符串使用 eval() 是很危险的。再次,参见 JSON site它提供了更多的解释以及一个非常短的 javascript 文件,可以安全地将 JSON 字符串解析为 Javascript 对象。
编辑:我想从技术上讲,您最初的问题不是关于 JSON,而是关于 object literals 的 Javascript 语法。不同之处在于可从 JSON 字符串构造的对象将排除许多其他可能的对象字面量,例如:
var a = {cat: "meow", dog: "woof"};
var aname = {cat: "Garfield", dog: "Odie"};
var b = {
counter: 0,
pow: function(x) { return x+1; },
zap: function(y) { return (counter += y); }
};
var c = {
all: [a,aname],
animals: a,
names: aname,
};
对象文字“a”和“aname”可以用 JSON 表示(通过在属性名称中添加引号)。但是对象文字“b”和“c”不能。对象文字“b”包含函数(JSON 中不允许)。上面的对象文字“c”包含对其他变量的引用,这种引用在 JSON 中无法表示,因为其中一些引用是共享的。如果您对 c.names
进行更改,它也会更改 c.all[1]
,因为它们共享对同一变量的引用。 JSON 只能表达具有树状结构的对象(例如,整个对象的每个子元素都是独立的)。
https://stackoverflow.com/questions/380855/
相关文章:
objective-c - 使用 Json 在 Objective C 中发布数据
ruby - 为什么我会得到 "no implicit conversion of String i
javascript - 使用 application/json 优于 text/plain 的优势
json - 如何将对象映射到数组以便可以将其转换为 csv?
json - 如何在 Ubuntu 上看到一个漂亮的大型 JSON 文件?
c# - 返回 JSON 对象 (ASP.NET WebAPI)
python - 将 Json 嵌套到具有特定格式的 pandas DataFrame