我想清楚地了解Javascript对象和JSON字符串之间的基本区别。
假设我创建了以下JS变量:
var testObject = {one: 1,"two":2,"three":3};
Q1.键/属性名称是否带引号/不带引号?(如"one" : 1
)
若有,分别在哪里?
JSON JSON.stringify(testObject)
**,:如果我用JSONJSON.stringify(testObject)
**,转换上面的对象,原来的JS对象和Q2有什么区别?**
我觉得它们几乎是一样的。请详细说明一下。
Q3:解析JSON字符串,推荐使用下面的方法吗?
var javascriptObj = JSON.parse(jSonString);
发布于 2011-11-28 17:57:11
在使用对象文字表示法时,唯一需要将键括在引号中的情况是键包含特殊字符(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
}
然而,你不能在邮件中发送一个抽屉柜,所以你要拆掉它(read,stringify it)。现在它在家具方面已经没有用处了。它现在是JSON。它是扁平包装的。
{"color":"red","numberOfDrawers":4}
当你收到它的时候,你就会重新构建抽屉柜(读取、解析它)。它现在又回到了对象的形式。
XML和YAML背后的原因是使数据能够以两种参与语言都能理解的格式在编程语言之间传输;您不能直接将JavaScript对象交给PHP或C++;因为每种语言本质上表示对象的方式都不同。但是,因为我们已经将对象字符串化为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"}"
var javascriptObj = JSON.parse(jSonString);
是的,但是older browsers don't support JSON natively (IE <8)。要支持这些功能,您应该包含json2.js
。
如果您使用的是jQuery,则可以调用jQuery.parseJSON()
,如果支持,它将在幕后使用JSON.parse()
,否则将后退到自定义实现来解析输入。
发布于 2011-11-28 18:03:26
Q1:在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有很多与之相关的讨厌的问题)。
发布于 2015-06-01 08:24:58
用JSON解决问题
假设您想要在两台计算机之间交换常规JavaScript对象,并且设置了两个规则:
现在,在第一个主机上创建两个对象:
var obj1 = { one: 1,"two":2,"three":3 }; // your example
var obj2 = { one: obj1.one, two: 2, three: obj1.one + obj1.two };
如何将这些对象转换为字符串,以便传输到第二个主机?
'{ one: 1,"two":2,"three":3 }'
获得的字符串,但实际上您无法读取文档的脚本部分中的文字(至少不容易)。因此,obj1
和obj2
实际上必须以相同的方式处理。JSON是为满足上述需求而创建的:它是一组规则,用于通过列出所有属性和值(方法被忽略)来创建与对象等效的字符串。
JSON规范了对属性名称和值使用双引号的做法。
请记住,JSON只是一组规则(一个标准)。
创建了多少个JSON对象?
只有一个,它由JS引擎自动创建。
浏览器中的现代JavaScript引擎都有一个本机对象,也称为JSON。此JSON对象能够:
JSON
(单个) JSON对象类似于编解码器,它的功能是编码和解码。
请注意:
返回到questions
var obj1 = { one: 1, "two": 2, "three": 3 };
var obj2 = JSON.parse('{ "one": "1", "two": "2", "three": "3" }');
JSON.parse()
用于从符合JSON的字符串创建JS对象。(jQuery也有一个可用于所有浏览器的等效方法)。https://stackoverflow.com/questions/8294088
复制相似问题