JSON和Object Literal Notation之间的区别是什么?
有人能告诉我通过使用“Object Literal Notation”定义的JavaScript对象和JSON对象之间的主要区别是什么?
根据一本JavaScript书,它说这是一个使用Object Notation定义的对象:
var anObject = {
property1 : true,
showMessage : function (msg) { alert(msg) }
};
为什么不是这种情况下的JSON对象? 仅仅因为它没有用引号定义?
让我们首先澄清JSON实际是什么。 JSON是一种独立于语言的文本数据交换格式,非常像XML,CSV或YAML。
数据可以以多种方式存储,但是如果它应该存储在文本文件中并且可以被计算机读取,则它需要遵循某种结构。 JSON是定义这种结构的多种格式之一。
这些格式通常是独立于语言的,这意味着它们可以通过Java,Python,JavaScript,PHP进行处理,您可以将其命名。
相反,JavaScript是一种编程语言。 当然,JavaScript也提供了一种定义/描述数据的方式,但是该语法对于JavaScript非常具体。
作为一个反例,Python具有元组的概念,它们的语法是(x, y)
。 JavaScript没有这样的东西。
让我们看看JSON和JavaScript对象文字之间的语法差异。
JSON具有以下语法约束:
"
)。 true
false
null
{"foo":"bar","foo":"baz"}
)会产生未定义的实现特定结果; JSON规范特别没有定义它们的语义 在JavaScript中,对象文字可以有
undefined
。 知道这一点,只是看语法,你的例子不是JSON,因为两个原因:
但最重要的是,从一开始就重复我的解释:您处于JavaScript环境中。 你定义一个JavaScript对象。 如果有的话,一个“JSON对象”只能包含在一个字符串中:
var obj = {foo: 42}; // creates a JavaScript object (this is *not* JSON)
var json = '{"foo": 452}'; // creates a string containing JSON
也就是说,如果你正在编写JavaScript源代码,而不是处理字符串,那么你不会处理JSON。 也许你以JSON的形式接收数据(例如,通过ajax或从文件中读取数据),但是一旦你或者使用的库解析了它,它就不再是JSON了。
仅仅因为对象字面量和JSON看起来相似,这并不意味着你可以互换地命名它们。 另请参见没有“JSON对象”这样的事情。
JSON的语法更为有限,其中包括:
"
而不是'
引用 真的没有“JSON对象”这样的东西。
JSON规范是将数据编码为字符串的语法。 人们称之为“JSON对象”(在JavaScript中)实际上只是一个普通的JavaScript对象,它可能已经(可能)已从有效的JSON字符串中反序列化,并且可以轻松地重新序列化为有效的JSON字符串。 这通常意味着它只包含数据(而不包含函数)。 这也意味着没有日期,因为JSON没有日期类型(可能是关于JSON最痛苦的事情;)
此外,当人们谈论一个“JSON对象”时,他们几乎总是指在顶层具有“花括号”的数据。 这很好地对应于一个JavaScript对象。 但是,JSON规范并不要求在JSON字符串的顶层有一个“花括号”对象。 在顶层有一个列表,甚至只有一个值,这是完全有效的JSON。 所以,虽然每个“JSON对象”对应于有效的JSON,但并非所有有效的JSON字符串都对应于我们称之为“JSON对象”的东西! (因为该字符串可能代表一个列表或一个原子值)
链接地址: http://www.djcxy.com/p/3391.html上一篇: What is the difference between JSON and Object Literal Notation?