JSON是一种数据格式,可以把 JSON 直接传给 eval(),而且不必创建 DOM 对象。它有三种类型的值:
简单值:使用与 JavaScript 相同的语法,可以在 JSON 中表示字符串、数值、布尔值和 null。但 JSON 不支持 JavaScript 中的特殊值 undefined。
例如:5、“hello world!”
对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
下面是一个 JavaScript 中的对象字面量:
var person = {
name: "Nicholas",
age: 29
};
json表示上述对象的方式如下:
{
"name": "Nicholas",
"age": 29
}
属性的值可以是简单值,也可以是复杂类型值,因此可以像下面这样在对象中嵌入对象:
{
"name": "Nicholas",
"age": 29,
"school": {
"name": "Merrimack College",
"location": "North Andover, MA"
}
}
数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。
JavaScript 中的数组字面量:var values = [25, "hi", true];在json中,可以采用同样的语法表示同一个数组:[25, "hi", true]。
把数组和对象结合起来,可以构成更复杂的数据集合,例如:
[{ "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }, { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 2, year: 2009 }, { "title": "Professional Ajax", "authors": [ "Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett" ], edition: 2, year: 2008 }, { "title": "Professional Ajax", "authors": [ "Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett" ], edition: 1, year: 2007 }]
JSON 不支持变量、函数或对象实例。JavaScript 字符串与 JSON 字符串的最大区别在于, JSON 字符串必须使用双引号(单引号会导致语法错误)。
JSON 对象有两个方法: stringify()和 parse()。在最简单的情况下,这两个方法分别用于把JavaScript 对象序列化为 JSON 字符串和把 JSON 字符串解析为原生 JavaScript 值。
var book = { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }; var jsonText = JSON.stringify(book, null, 4); // var jsonText = JSON.stringify(book, null, " - -"); console.log(jsonText); var bookCopy = JSON.parse(jsonText, function(key, value) { if (key == "releaseDate") { return new Date(value); } else { return value; } }); console.log(bookCopy);