一、概述
- JSON(JavaScript Object Notation,JavaScript对象表示法),它是JavaScript的一个严格子集。
- JSON只是一种简单数据格式,并不是只有JavaScript拥有。
二、语法
JSON对值的类型和格式有严格的规定:
- 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
- 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和 undefined)。
- 字符串必须使用双引号表示,不能使用单引号。
- 对象的键名必须放在双引号里面。
- 数组或对象最后一个成员的后面,不能加逗号。
简单值
最简单的JSON数据形式就是简单值。
5
"tg"
null
true
false
对象
JSON中的对象与JavaScript中的对象字面量基本一样,除了JSON中的对象要求对象的属性一定要加上双引号(对象字面量的 属性对引号可有可无)。
{
"name": "tg"
}
当然,你可以使用嵌套对象:
{
"name": "tg",
"school": {
"name": "tg",
"location": "gz"
}
}
注意:上面有两个同名(name)属性,这是没问题的,因为它们属于不同的对象,但是请注意,同一对象内不能 出现两个同名属性。
数组
JSON数组采用的是JavaScript中的数组字面量。
{
"color": ["red","blue"]
}
注意:也可以在数组中放对象,对象中放数组。
三、序列化和反序列化
JSON对象有两个方法: JSON.stingify() 和 JSON.parse() ,分别表示将JavaScript对象序列化为JSON字符串和把 JSON字符串解析为原生的JavaScript值。
JSON.stringify()
JSON.stringify 方法用于将一个Javascript对象序列化为字符串。该字符串应该符合JSON格式,并且可以被 JSON.parse 方法还原。
var data = {
name: 'tg',
age: 1,
books: [ "Javascript", 2],
location:{ name: "gz", },
test: function(){},
sex: undefined
};
console.log(JSON.stringify(data));
//{"name":"tg","age":1,"books":["Javascript",2],"location":{"name":"gz"}}
注意:在序列化JavaScript对象时,所有函数及原型成员都会被有意忽略,不体现在结果中,而且值为undefined的任何属性 也会被跳过,还有正则对象会被转成空对象。,最终返回来的值为有效的JSON格式。
JSON.parse()
JSON.parse 方法用于将JSON字符串转化成原生的JavaScript对象。
var jsonText = '{
"name":"tg",
"age":1,
"books":["Javascript",2],
"location":{"name":"gz"}}';
console.log(JSON.parse(jsonText));
//返回对象 { name: 'tg', age: 1, books: [ "Javascript", 2], location:{ name: "gz", } };
注意:如果传入的字符串不是有效的JSON格式,则会报错。