-
键/属性名称在带/不带引号的情况下都有效吗?
在使用 Object Literal 表示法时,唯一需要将键括在引号中的情况是键包含特殊字符(if、:、- 等)。值得注意的是,JSON 中的键必须用双引号括起来。
-
如果我使用var jSonString = JSON.stringify(testObject);将上面的对象转换为JSON,那2(JS obj和JSON)有什么区别?
JSON 是一种数据交换格式。它是一个标准,描述了有序列表和无序映射、字符串、布尔值和数字如何在字符串中表示。就像 XML 和 YAML 是在语言之间传递结构化信息的一种方式一样,JSON 也是如此。另一方面,JavaScript 对象是一种物理类型。就像 PHP 数组、C++ 类/结构一样,JavaScript 对象是 JavaScript 的内部类型。
这是一个故事。假设您从商店购买了一些家具,并且希望将其交付。但是库存中只剩下展示模型,但您同意购买。
在商店里,您购买的抽屉柜是活物:
var chestOfDrawers = {
color: "red",
numberOfDrawers: 4
}
但是,您不能在邮件中发送抽屉柜,因此您将其拆除(阅读,将其串起来)。它现在在家具方面毫无用处。现在是 JSON。它采用扁平包装形式。
{"color":"red","numberOfDrawers":4}
当您收到它时,您会重新构建抽屉柜(读取、解析它)。它现在又回到了对象形式。
JSON、XML 和 YAML 背后的原因是使数据能够以两种参与语言都能理解的格式在编程语言之间传输;你不能直接给 PHP 或 C++ 你的 JavaScript 对象;因为每种语言在底层都以不同的方式表示一个对象。但是,因为我们已经将对象字符串化为 JSON 表示法;即表示数据的标准化方式,我们可以将对象的 JSON 表示传输到另一种语言(C++、PHP),他们可以将我们拥有的 JavaScript 对象重新创建到他们的自己的对象基于对象的 JSON 表示。
请务必注意,JSON 不能表示函数或日期。如果您尝试使用函数成员对对象进行字符串化,则 JSON 表示中将省略该函数。日期将转换为字符串;
JSON.stringify({
foo: new Date(),
blah: function () {
alert('hello');
}
}); // returns the string "{"foo":"2011-11-28T10:21:33.939Z"}"
-
解析 JSON 字符串,是否推荐以下方法? var javascriptObj = JSON.parse(jSonString);
是的,但是older browsers don't support JSON natively (IE <8)。要支持这些,您应该添加json2.js。
如果您使用 jQuery,则可以调用 jQuery.parseJSON(),如果支持,它将在后台使用 JSON.parse(),否则将回退到自定义实现来解析输入。