JSON对象
整理自《JavaScript 标准参考教程(alpha)》,by 阮一峰
1.JSON 格式
JSON 格式是一种用于数据交换的文本格式。
符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。
每个 JSON 对象,就是一个值。每个 JSON 文档只能包含一个值。
JSON 对值的类型和格式有严格的规定
-
复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
-
简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和
null
(不能使用NaN
,Infinity
,-Infinity
和undefined
)。 -
字符串必须使用双引号表示,不能使用单引号。
-
对象的键名必须放在双引号里面。
-
数组或对象最后一个成员的后面,不能加逗号。
ES5 新增了JSON
对象,用来处理 JSON 格式数据。它有两个方法:JSON.stringify()
和JSON.parse()
。
2.JSON.stringify()
JSON.stringify
方法用于将一个值转为字符串。
该字符串符合 JSON 格式,并且可以被JSON.parse
方法还原。
需要注意的是,对于原始类型的字符串,转换结果会带双引号。
JSON.stringify('foo') === "foo" // false JSON.stringify('foo') === "\"foo\"" // true
上面代码中,字符串foo
,被转成了""foo""
。
这是因为将来还原的时候,双引号可以让 JavaScript 引擎知道,foo
是一个字符串,而不是一个变量名。
如果原始对象中,有一个成员的值是undefined
、函数或 XML 对象,这个成员会被过滤。
var obj = { a: undefined, b: function () {} }; JSON.stringify(obj) // "{}"
如果数组的成员是undefined
、函数或 XML 对象,则这些值被转成null
。
var arr = [undefined, function () {}]; JSON.stringify(arr) // "[null,null]"
正则对象会被转成空对象。
JSON.stringify(/foo/) // "{}"
JSON.stringify
方法会忽略对象的不可遍历属性。
3.JSON.parse()
JSON.parse
方法用于将JSON字符串转化成对象。
如果传入的字符串不是有效的JSON格式,JSON.parse
方法将报错。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JSON</title> </head> <body> <script> var xiaoming = { name : "小明", age : 23, gender : true, height : 1.77, "middle-school" : "\'w3c\' Middle School", skills : ["JavaScript", "Java", "Python", "Lisp"] }; var str = JSON.stringify(xiaoming,null," "); console.log(str); // 输出{ // "name": "小明", // "age": 23, // "gender": true, // "height": 1.77, // "middle-school": "'w3c' Middle School", // "skills": [ // "JavaScript", // "Java", // "Python", // "Lisp" // ] // } var str1 = JSON.stringify(xiaoming,["name","skills"]," "); console.log(str1); // 输出{ // "name": "小明", // "skills": [ // "JavaScript", // "Java", // "Python", // "Lisp" // ] // } function convert(key, value) { if(typeof value === "string"){ return value.toUpperCase(); } return value; } var str2 = JSON.stringify(xiaoming,convert," "); console.log(str2); // 输出{ // "name": "小明", // "age": 23, // "gender": true, // "height": 1.77, // "middle-school": "'W3C' MIDDLE SCHOOL", // "skills": [ // "JAVASCRIPT", // "JAVA", // "PYTHON", // "LISP" // ] // } //反序列化 var str3 = JSON.parse("[1,2,3,true]"); console.log(str3);//[1,2,3,true] </script> </body> </html>