1.JSON 格式
JSON格式是用于数据交换的文本格式,
每个JSON对象就是一个值,可能是一个数组或对象,也可能是一个原始类型的值,总之是一个值不能是两个或更多的值。
JSON对值的类型和格式有严格的规定。
1.复合类型的值只能是数组或对象,不能是函数,正则,日期.
2.原始类型的值只有四种:字符串,数值(必须以十进制表示),布尔值和null(不能使用NaN
, Infinity
, -Infinity
和undefined
)。
3.字符串必须是双引号表示不能是单引号。
4.对象的键名必须放在双引号内。
5.数组或对象最后一个成员后面不能加逗号。
以下都是合法的 JSON。
["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["张三", "李四"] }
[ { "name": "张三"}, {"name": "李四"} ]复制代码
2.JSON 对象
JSON
对象是 JavaScript 的原生对象,用来处理 JSON 格式数据。它有两个静态方法:JSON.stringify()
和JSON.parse()
。
3.JSON.stringify()
3.1基本用法
JSON.stringify
方法用于将一个值转为 JSON 字符串。该字符串符合 JSON 格式,并且可以被JSON.parse
方法还原。
JSON.stringify('abc') // ""abc""
JSON.stringify([]) // "[]"JSON.stringify({}) // "{}"
JSON.stringify([1, "false", false])
// '[1,"false",false]'
JSON.stringify({ name: "张三" })
// '{"name":"张三"}'复制代码
上面代码将各种类型的值,转成 JSON 字符串。
注意,对于原始类型的字符串,转换结果会带双引号。
JSON.stringify('foo') === ""foo"" // true复制代码
如果对象的属性是undefined
、函数或 XML 对象,该属性会被JSON.stringify
过滤。
var obj = {
a: undefined,
b: function () {}
};
JSON.stringify(obj) // "{}"复制代码
上面代码中,对象obj
的a
属性是undefined
,而b
属性是一个函数,结果都被JSON.stringify
过滤。
如果数组的成员是undefined
、函数或 XML 对象,则这些值被转成null
。
var arr = [undefined, function () {}];
JSON.stringify(arr) // "[null,null]"复制代码
上面代码中,数组arr
的成员是undefined
和函数,它们都被转成了null
。
正则对象会被转成空对象。
JSON.stringify(/foo/) // "{}"复制代码
JSON.stringify
方法会忽略对象的不可遍历属性。
var obj = {};
Object.defineProperties(obj, {
'foo': {
value: 1,
enumerable: true
},
'bar': {
value: 2,
enumerable: false
}
});
JSON.stringify(obj); // "{"foo":1}"复制代码
上面代码中,bar
是obj
对象的不可遍历属性,JSON.stringify
方法会忽略这个属性。
4.JSON.parse()
JSON.parse
方法用于将 JSON 字符串转换成对应的值。
如果传入的字符串不是有效的 JSON 格式,JSON.parse
方法将报错。
JSON.parse("'String'") // illegal single quotes
// SyntaxError: Unexpected token ILLEGAL复制代码