Javascript对象VS JSON
我想明白JavaScript对象和JSON字符串之间的基本区别。
假设我创建了以下JS变量:
var testObject = {one: 1,"two":2,"three":3};
Q1。 密钥/属性名称是否同时使用/不使用引号? (例如"one" : 1
)
如果是,有什么区别?
Q2:如果我使用JSON.stringify(testObject)
转换上述对象,那么原始JS对象和JSON有什么区别?
我觉得他们几乎是一样的。 请详细说明这一点。
问题3:解析JSON字符串时,建议使用以下方法吗?
var javascriptObj = JSON.parse(jSonString);
密钥/属性名称是否同时使用/不使用引号?
在使用Object Literal符号时,唯一需要用引号将引号括起来的地方是密钥包含特殊字符( if
:
, -
, -
等)的位置。 值得注意的是,JSON中的键必须用双引号括起来。
如果我使用var jSonString = JSON.stringify(testObject);
将上述对象转换为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()
,否则将回退到自定义实现以解析输入。
问题1:在javascript中定义对象文字时,键可能包含引号或不包含引号。 除了引号允许您指定某些可能导致解释器无法解析的密钥(如果您试图使用它们)之外,没有任何区别。 例如,如果您想要一个只是感叹号的密钥,则需要引号:
a = { "!": 1234 } // Valid
a = { !: 1234 } // Syntax error
但在大多数情况下,您可以省略对象文字上的引号。
Q2:JSON实际上是一个字符串表示。 这只是一个字符串。 所以,考虑一下:
var testObject = { hello: "world" }
var jSonString = JSON.stringify(testObject);
由于testObject
是一个真实的对象,你可以调用它的属性,并做任何你可以用对象做的事情:
testObject.hello => "world"
另一方面, jsonString
只是一个字符串:
jsonString.hello => undefined
注意另一个区别:在JSON中,必须引用所有的键。 这与对象文字形成鲜明对比,根据我在Q1中的解释,通常可以省略引号。
Q3。 您可以使用JSON.parse
解析JSON字符串,这通常是实现它的最好方法(如果浏览器或框架提供的话)。 你也可以使用eval
因为JSON是有效的javascript代码,但前面的方法是由于许多原因而推荐的(eval有很多与它相关的讨厌问题)。
Q1 - 在JS中,如果密钥是保留字或者否则会是非法令牌,则只需使用引号。 在JSON中,您必须始终在键名上使用双引号。
Q2 - jsonString
是输入对象的序列化版本...
Q3 - 可能使用JSON.parse()
将其反序列化为相同的外观对象