键/属性名是否带引号或不带引号都有效?
使用Object Literal表示法时,唯一需要将键括在引号中的情况是键是保留字或包含特殊字符(if,:, - etc)。值得注意的是,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
}
然而,你不能邮寄一个抽屉柜,所以你把它拆开了(读,stringify它)。就家具而言,它现在已经没用了。现在是JSON。它是平装的。
{"color":"red","numberOfDrawers":4}
当您收到它时,然后重新构建抽屉柜(读取、解析它)。现在它又回到了对象形式。
The reason behind JSON, XML and YAML is to enable data to be transferred between programming languages in a format both participating languages can understand; you can't give PHP or C++ your JavaScript object directly; because each language represents an object differently under-the-hood. However, because we've stringified the object into JSON notation; i.e. a standardised way to represent data, we can transmit the JSON representation of the object to another language (C++, PHP), they can recreate the JavaScript object we had into their own object based on the JSON representation of the object.
需要注意的是,JSON不能表示函数或日期。如果您尝试用函数成员对对象进行stringify,则该函数将从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(),否则将回退到自定义实现来解析输入。