我是 JSON 和 JavaScript 对象的新手。
- 有人可以解释一下 JSON 和 JavaScript 对象之间的区别吗?
- 它们的用途是什么?
- 这个比那个好吗?还是视情况而定?
- 什么时候用,什么情况下?
- 为什么首先创建 JSON?它的主要目的是什么?
- 有人可以举例说明何时应该使用 JSON 而不是 JavaScript 对象,反之亦然?
我是 JSON 和 JavaScript 对象的新手。
首先你应该知道什么是 JSON:
JSON 的语法受到 JavaScript Object Literal 表示法的启发,但它们之间存在差异。
例如,在 JSON 中,所有键都必须被引用,而在对象文字中,这不是必需的:
// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
JSON 上的引号是强制性的,因为在 JavaScript(更确切地说是在 ECMAScript 3rd. Edition 中)中,不允许使用保留字作为属性名称,例如:
var o = { if: "foo" }; // SyntaxError in ES3
虽然,使用字符串文字作为属性名称(引用属性名称)没有问题:
var o = { "if": "foo" };
因此,对于“兼容性”(可能是简单的评估?),引号是强制性的。
JSON 中的数据类型也仅限于以下值:
string
number
object
array
true
false
null
Strings
变化的语法。它们必须用双引号分隔,而在 JavaScript 中,您可以交替使用单引号或双引号。
// Invalid JSON:
{ "foo": 'bar' }
接受的 JSON 语法Numbers
也发生了变化,在 JavaScript 中,您可以使用十六进制文字,例如0xFF
,或(臭名昭著的)八进制文字,例如010
。在 JSON 中,您只能使用十进制文字。
// Invalid JSON:
{ "foo": 0xFF }
有一些错误的实现(Firefox 3.5+、IE8+、json2.js)其中八进制文字被错误地允许,例如JSON.parse('01')
应该产生一个SyntaxError
.
JSON 是对象的字符串表示形式。它是一种可互操作的序列化格式。它不仅与 javascript 相关。例如,有用于 .NET 的 JSON 序列化程序,允许您序列化/反序列化 .NET 对象。
因此,它只是一种允许您将对象转换为字符串并返回的格式,如果您想通过网络传输它们,这很方便。
它非常接近 javascript 对象表示,如果您只是eval()
一个 JSON 字符串,您将获得相应的对象。
JSON 是一种数据交换格式,它恰好看起来像是 YAML 或 JavaScript 代码的子集,您可以执行并取回对象。JavaScript 对象只是 JavaScript 中的一个对象。
JSON 是一种数据交换格式,您可以与它交换文本形式的结构化数据。现在它已经与 JavaScript 分离了。JavaScript 对象允许您在 JavaScript 程序执行期间创建和使用结构化数据。