JavaScript对象与JSON

JavaScript对象与JSON

我想清楚地理解Javascript对象和JSON字符串之间的基本区别。

假设我创建了以下JS变量:

var testObject = {one: 1,"two":2,"three":3};

Q1.带/不带引号的键/属性名称有效吗?(如:"one" : 1)

如果是,有什么区别?

Q2:如果我使用JSON.stringify(testObject),原始JS对象和JSON之间有什么区别?

我觉得它们几乎是一样的。请详细说明一下。

Q3:对于解析JSON字符串,建议使用下面的方法吗?

var javascriptObj = JSON.parse(jSonString);


慕娘9325324
浏览 332回答 3
3回答

桃花长相依

带/不带引号的键/属性名称有效吗?在使用对象文字表示法时,唯一需要将键括在引号中的情况是键包含一个特殊字符(if,&nbsp;:,&nbsp;-等等)值得注意的是,JSON中有一个键必围在双倍引号。如果我使用以下方法将上述对象转换为JSONvar jSonString = JSON.stringify(testObject);,2(JS obj和JSON)之间有什么区别?杰森是一种数据交换格式。这是一个标准,用来描述有序列表和无序映射、字符串、布尔和数字如何用字符串表示。就像XML和YAML是在语言之间传递结构化信息的一种方式一样,JSON也是一样的。另一方面,JavaScript对象是一种物理类型。就像PHP数组、C+类/struct一样,JavaScript对象是JavaScript的内部类型。这里有个故事。让我们想象一下,你从一家商店买了一些家具,你想把它送货。然而,唯一的库存是显示模型,但你同意购买它。在商店里,你买的抽屉箱是一个活物:var&nbsp;chestOfDrawers&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;"red", &nbsp;&nbsp;&nbsp;&nbsp;numberOfDrawers:&nbsp;4}然而,你不能在邮政寄出一箱抽屉,所以你拆除它(阅读,紧张它)。从家具的角度来说,它现在已经毫无用处了。现在是JSON了。它以扁平的包装形式。{"color":"red","numberOfDrawers":4}当你收到它,然后你重建抽屉箱(读,解析)。它现在以对象形式返回。JSON/XML和YAML背后的原因是为了使数据能够以两种参与语言都能理解的方式在编程语言之间传输;您不能直接给PHP或C+JavaScript对象;因为每种语言都代表不同的对象。但是,由于我们已经将对象压缩为JSON表示法;即表示数据的标准化方法,所以我们可以传输JSON表象对象到另一个langauge(C+,PHP),它们可以重造我们在他们自己的对象中使用的JavaScript对象基对象的JSON表示形式。需要注意的是,JSON不能表示函数或日期。如果试图使用函数成员对象进行字符串化,则将从JSON表示中省略该函数。日期将转换为字符串;JSON.stringify({ &nbsp;&nbsp;&nbsp;&nbsp;foo:&nbsp;new&nbsp;Date(), &nbsp;&nbsp;&nbsp;&nbsp;blah:&nbsp;function&nbsp;()&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('hello'); &nbsp;&nbsp;&nbsp;&nbsp;}});&nbsp;//&nbsp;returns&nbsp;the&nbsp;string&nbsp;"{"foo":"2011-11-28T10:21:33.939Z"}"对于解析JSON字符串,建议使用下面的方法吗?var javascriptObj = JSON.parse(jSonString);是的,但是旧浏览器本机不支持JSON(IE<8)..要支持这些,您应该包括json2.js.如果使用jQuery,可以调用jQuery.parseJSON(),它将使用JSON.parse()如果支持它,否则将返回到自定义实现来解析输入。

ITMISS

Q1:在javascript中定义对象文字时,键可能包括引号或不引号。除了引号允许您指定某些键之外,没有任何不同之处,这些键会导致解释器在尝试时无法解析。例如,如果您想要一个仅仅是感叹号的键,则需要引号:a&nbsp;=&nbsp;{&nbsp;"!":&nbsp;1234&nbsp;}&nbsp;//&nbsp;Valida&nbsp;=&nbsp;{&nbsp;!:&nbsp;1234&nbsp;}&nbsp;//&nbsp;&nbsp;Syntax&nbsp;error但是,在大多数情况下,您可以省略对象文本键周围的引号。问题2:json实际上是一个字符串表示形式。只是一根绳子。所以,考虑一下:var&nbsp;testObject&nbsp;=&nbsp;{&nbsp;hello:&nbsp;"world"&nbsp;}var&nbsp;jSonString&nbsp;=&nbsp;JSON.stringify(testObject);自testObject是一个真实的对象,您可以调用它的属性,并对象执行其他任何操作:testObject.hello&nbsp;=>&nbsp;"world"另一方面,jsonString只是一个字符串:jsonString.hello&nbsp;=>&nbsp;undefined注意另一个不同之处:在JSON中,必须引用所有键。这与对象文字形成了对比,根据我在Q1中的解释,这些引号通常可以省略。Q3.可以通过以下方法解析JSON字符串JSON.parse,这通常是最好的方法(如果浏览器或框架提供的话)。你也可以用eval因为JSON是有效的javascript代码,但是推荐使用前一种方法有很多原因(val有很多与它相关的讨厌的问题)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript