转载自
https://itbilu.com/javascript/js/Vkmh3oeOg.html
JSON(JavaScript Object Notation,JavaScript对象标记)是一种轻量级的轻量级的数据交换语言,是ECMAScript的一个子集。JSON是独立于语言的一种文本格式,这种格式非常易于人的阅读和编写,也易于机器的解析。由于没有过多的描述标记,在网络传输中有较高的传输效率,是一种理想的数据交互格式。
1. JSON特点
JSON是ECMAScript的子集,其与JavaScript中的对象结构类似,是一种键/值(key/value)对的形式。一个JSON结构如下:
{
"name":"IT笔录",
"domain":"www.itbilu.com",
"menus":["Node.js","JavaScript","数据库","Linux"],
"config":
{
"db":"dbPath",
"host":"192.168.1.22",
"port":80
}
}
结合上例,JSON特征如下:
JSON数据包含在一个大括号{}中,由{开始,}结束
JSON的键/值由:分隔,如:"name":"IT笔录"
JSON的键必须使用双引号""
每组键/值对使用,分隔,且最后一个属性后面不能有逗号。
JSON的值根据数据类型的不同,有不同的表现形式
2. JSON值类型
JSON可以理解为JavaScript对象的序列化形式,JSON的值也可以理解为JavaScript对象的值。但并不是JavaScript对象的所有值都可以JSON值中表现,JSON中的值类型有:
字符串类型(String),需要包在双引号""
null中
布尔类型(true或false)。
数组(Array),需要包在方括号[]中
对象(子JSON),需要包在大括号{}中
以上5种数据类型都可以JSON中使用。JSON数据值也有所限制,除上面的数据类型外,如:JavaScript中的函数(Function)、二进制类型等都不能在JSON中使用。
3. JavaScript中的JSON对象
3.1eval()函数与JSON对象
ECMAScipt 5之前,可以使用eval()函数将JSON字符串转换为JavaScript的Object。
ECMAScipt 5中增加了JSON,相比eval()函数,JSON对象处理JSON数据更为方便和准确。
如,分别使用eval()和JSON处理Unicode编码数据:
var code = '"\u2028\u2029"';
JSON.parse(code); // 正常执行
eval(code); // 执行失败
3.2JSON对象中的方法
JSON对象使用非常简单,该对只提供了两个对象方法,分别用于将对象序化为JSON字符串和将JSON字符串反序列化为JavaScriptObject。
JSON.parse(),解析JSON字符串,并返回解析值(JavaScript对象)。
JSON.stringify(),序列化JavaScript对象,并返回序列化后的JSON字符串。返回值只包含合法的JSON值,不合法的值将被丢弃。
如,使用JSON.stringify()序列化一个JavaScript对象:
var site = {
name:'IT笔录',
domain:'www.itbilu.com',
get: function () {
return this.name;
}
}
JSON.stringify(site); // {"name":"IT笔录","domain":"www.itbilu.com"}
如上所示,function是不合法的JSON值,JSON.stringify()序列化时将其丢弃。
使用JSON.parse()解析JSON字符串:
var jsonString = '{"name":"IT笔录","domain":"www.itbilu.com"}';
JSON.parse(jsonString); // { name: 'IT笔录', domain: 'www.itbilu.com' }