【发布时间】:2011-09-23 07:18:21
【问题描述】:
谁能通过例子告诉我Javascript对象和JSON对象的区别?
【问题讨论】:
标签: javascript json
谁能通过例子告诉我Javascript对象和JSON对象的区别?
【问题讨论】:
标签: javascript json
Javascript object 是 Javascript 中的一种数据类型 - 它仅在 Javascript 中才有意义。通常你会看到像这样的 Javascript 对象文字:
var obj = {
a: 1,
b: 2
};
JSON string 是一种数据交换格式——它只不过是一堆以特定方式格式化的字符(以便不同的程序相互通信)。因此,它可以存在于 Javascript 中,也可以存在于其他语言中,也可以简单地存储在数据库或文本文件中。
上面的 Javascript 对象可以用 Javascript 中的 JSON 格式表示,如下所示:
var json = '{ "a": 1, "b": 2 }';
或者在 C# 中像这样:
string json = "{ \"a\": 1, \"b\": 2 }";
如您所见,JSON 只是存储在字符串中。为了使其有用,可以解析 JSON 字符串以生成任何语言的对象。因为 JSON 格式模仿了 Javascript 的对象文字语法,所以 Javascript 使解析过程变得简单:
var obj = eval('(' + json + ')');
虽然通常你会看到:
var obj = JSON.parse(json); // for security reasons
请注意,JSON 的局限性在于它不能存储函数 - 它可以包含的唯一值是:
【讨论】:
JSON 是 javscript 对象的文本表示。它实际上是 javascript 表示法中的对象文字(因此得名 - JavaScript Object Notation => JSON)。
如果要“比较”两个对象,请将文本转换为对象,然后比较键和值。
对象到/从文本的一些示例:
// Create obj using an object literal
var obj = {key: 'value'};
// Convert to text using JSON.stringify
var text = JSON.stringify(obj);
// Show the value of text
alert( text ); // {"key":"value"}
// Create a new object from text
var newObj = JSON.parse(text); // javascript object
// Show the text version of newObj
alert(JSON.stringify(newObj)); // {"key":"value"}
// Use text as code
var newObj2 = eval('(' + text + ')');
// It is indeed a string literal
alert(JSON.stringify(newObj2)); // {"key":"value"}
如果您想比较两个对象,请将它们从 JSON 转换为对象(如果它们首先是 JSON),然后执行以下操作:
function compareObjects(a, b) {
var i, p, aProps = [], bProps = [];
// Simple test first
if (a === b) {
return true;
}
// Get properties of a
for (p in a) {
if (a.hasOwnProperty(p)) {
aProps.push(p);
}
}
// Get properties of b
for (p in b ) {
if (b.hasOwnProperty(p)) {
bProps.push(p);
}
}
// If don't have same properties, return false
if (aProps.sort().join('') != bProps.sort().join('')) {
return false;
}
// If property values aren't the same, return false
i = aProps.length;
while (i--) {
if (a[aProps[i]] !== b[bProps[i]]) {
return false;
}
}
// If passed all tests, must be equal
return true;
}
【讨论】:
JSON 代表“JavaScript 对象表示法”。基本上,JSON 是 Javascript,但仅限于用数据填充对象。通过执行 JSON 对象,您可以将数据“加载”到内存中。
JavaScript 是更大的图景,有额外的代码行来操作对象或做各种其他事情。
JSON 示例如下:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
JavaScript 示例如下:
var Glossary = {
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
注意到 JavaScript 中的 var Glossary = 了吗?
【讨论】:
首先,JavaScript 就像面向对象编程中的任何其他对象一样。
正如 RobG 所说,JSON 实际上是 Javascript Notation 中的对象文字。但不完全是。 根据一本 Javascript 书,它说这是一个使用 Object Notation 定义的对象:
var newObject =
{ prop1 : true,
showMessage : function (msg) {alert(msg)}
};
根据 JavaScript 中的 JSON,
JSON 是 JavaScript 的对象文字符号的子集。
你也可以考虑看看这个link
【讨论】:
var object = {
name: "John",
profession: "blogger"
};
alert(object.name);//John
alert(typeof(object));//Object
alert(object);//[object Object]
var json = JSON.stringify(object);
alert(json.name);//undefined
alert(typeof(json));//string
alert(json);//{"name":"John","profession":"blogger"}
【讨论】: