JavaScript入门经典第5版-第八章-JSON简介
@(Web)
JSON是什么
- 是JavaScript Object Notation的缩写,发音Jason [ˈdʒeɪsən]
- 一种JS的简单紧凑的标签,可以转换:对象
→ 字符串。 - 在JSON中,对象以普通JS代码表示,可利用JS自动解析。
- 数据表示方式:
- 参数-值pair
- 参数与值的分隔符:冒号
- pair间分隔符:逗号
- 最终将pair序列用大括号包装,表示JSON**对象**
- 举例:
var jsonObj = {
"parm0": "value0",
"parm1": "value1",
"parm2": "value2"
}
- JSON对象具有属性和方法,可用句点访问。如访问JSON对象中的属性:
jsonObj.parm0//访问value0
- 任何能够以系列”参数”:”值”pair表示的数据都可以用JSON
访问JSON数据
去序列化
- 去序列化:将字符串转化为JS代码
使用eval()函数
- 使用
eval()
函数,示例如下:
var user = '{"username": "gdymind","location":"China"}';
var userObj = eval('(' + user + ')');
alert(userObj.username);
注意:上面的字符串一定要加括号,防止含义不明确。
3. eval()
用法:
- 参数是表达式,计算值,如:var x = eval(3*4);
。则x为12
- 参数是是若干JS语句,则执行语句,如:eval("a = 1; document.write(a)")
浏览器直接支持
- 浏览器创建一个JS对象——JSON来对JSON进行编码和解码,该对象有两个方法:
stringify()
,parse()
。 parse()
:参数为字符串,返回值为对象,如
var Gdymind = '{"gender":"male","weight": 130, "favourite":"Computer Science"}';
var obj = JSON.parse(Gdymind);
var out = "";
for(i in obj) {
out += i + "=" + obj[i] + "\n";
}
alert(out);
运行结果如下:
序列化
- 将对象转化为字符串,便于网络传输。
- 使用
JSON.stringify()
方法进行序列化。 - 示例:
var Gdymind = new Object();
Gdymind.gender = "male";
Gdymind.weight = 130;
Gdymind.favourite = "Computer Science";
alert(JSON.stringrify("Gdymind"));
运行结果如下:
数据类型
- 参数命名规范:
- 不能为JS关键字
- 不能以数字开头
- 不能包含特殊字符,但可以包含下划线和美元符号
- 值的类型:数值,字符串,布尔值,数组,对象,null。
- Date,Error,Math和Function数据类型JSON不能识别,此时要转成其他数据类型。
map
JS里不支持map(映射,关联数组),只能myArray[0]
、myArray[1]
这样访问,使用JSON可以“模拟”map,如前面例子中可以用Gdymind["gender"]
访问Gdymind
对象的gender
属性。
使用JSON创建对象
使用JSON标签表示对象时,
- 将对象包在大括号里
- “参数”: “值”表示属性
- 匿名函数表示方法
示例:
var Gdymind = {
"username": "default",
"location": "China",
"height": 130,
"setName" function(newName) {
this.userName = newName;
}
}
var newName = "Gdymind";
Gdymind.setName(newName);
alert(Gdymind.userName);
运行效果如下:
- 属性可以是数组:
var bookList = {
"booklist": [
"Introduction to Algorithm",
"Data Structrue",
"Machine Learning"
]
}
- JSON对象里可以嵌套其他对象
JSON的安全性
使用eval()
的缺点:
- 可以执行任意JS代码
- 解析速度慢
因此建议使用浏览器中的JSON解析器(使用JSON.parse()
和JSON.stringify()
)。