-
带/不带引号的键/属性名称是否有效?
你需要使用对象的文字符号时放在引号的关键唯一的一次,其中关键包含特殊字符(if
,:
,-
等)。值得注意的是,JSON 中的键必须用双引号括起来。
-
如果我使用 将上述对象转换为 JSON var jSonString = JSON.stringify(testObject);
,那么 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),他们可以根据对象的 JSON 表示将我们拥有的 JavaScript 对象重新创建到他们自己的对象中。
需要注意的是,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);
是的,但较旧的浏览器本身不支持 JSON (IE <8)。为了支持这些,你应该包括json2.js
.
如果您使用 jQuery,则可以调用jQuery.parseJSON()
,JSON.parse()
如果支持,它将在后台使用,否则将回退到自定义实现来解析输入。