我想清楚地了解 Javascript 对象和 JSON 字符串之间的基本区别。
假设我创建了以下 JS 变量:
var testObject = {one: 1,"two":2,"three":3};
Q1。 带/不带引号的键/属性名称是否有效?(例如"one" : 1)
"one" : 1
如果是,有什么区别?
Q2:如果我用 转换上面的对象JSON.stringify(testObject),原来的 JS 对象和 JSON 有什么区别?
JSON.stringify(testObject)
我觉得他们几乎是一样的。请详细说明这一点。
Q3:解析JSON字符串,推荐使用下面的方法吗?
var javascriptObj = JSON.parse(jSonString);
带/不带引号的键/属性名称是否有效?
使用 Object Literal 表示法时,唯一需要将键括在引号中的情况是键是保留字或包含特殊字符(if、:等-)。值得注意的是,JSON 中的键 必须 用 双 引号引起来。
if
:
-
如果我使用 将上述对象转换为 JSON var jSonString = JSON.stringify(testObject);,那么 2(JS obj 和 JSON)有什么区别?
var jSonString = JSON.stringify(testObject);
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.
json2.js
如果您使用的是 jQuery,则可以调用jQuery.parseJSON(),JSON.parse()如果支持,它将在后台使用,否则将回退到自定义实现来解析输入。
jQuery.parseJSON()
JSON.parse()