JSON
JSON的全称是”JavaScript Object Notation”,就是一个有特殊规则的字符串,按照这个规则我们就可以把这个字符串解析成JS对象,是一种基于文本,独立于语言的轻量级数据交换格式。
XML也是一种数据交换格式,为什么JSON更适合JS使用呢?
因为XML在JS中处理XML不方便,同时XML标记比数据多,JSON无附加的标记,在JS中可作为对象处理。
主要总结有:
1. JSON的两种结构形式:对象和数组;
2. 字符串,JSON字符串,JSON对象区别;
3. JSON对象与JSON字符串相互转换;
4. 对象字面量与JSON的区别;
1. JSON的两种结构形式:对象和数组;
对象结构:
1. 以”{”大括号开始,以”}”大括号结束;
2. 中间部分由零个或多个以”,逗号”分隔的”key(关键字)/value(值)”对构成;
3. 关键字和值之间以”:”分隔;
4. 所有属性名称和它的值都必须用双引号引住,不能使用单引号;
//JSON对象 Json = {"username":"James", "password":"23"};
数组结构:数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。
1. 以“[”(左中括号)开始,“]”(右中括号)结束;
2. 中间部分由零个或多个以”,逗号”分隔的JSON对象格式数据构成;
//JSON数组格式 Json = [ {"username":"James", "password":"23"}, {"username":"Oven", "password":"2"} ];
要求:关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组;
要求字符集必须是Unicode;
2. 字符串,JSON字符串,JSON对象区别
字符串:指使用“”双引号或’’单引号包括的字符;
json字符串:实质还是字符串,指的是符合json格式要求的js字符串,就是用双引号或单引号包括的json对象;
json对象:指符合json格式要求的js对象;
//这是一个字符串 str = "James"; //这是一个json字符串,本质还是字符串,需要用单引号或双引号包括起来 Json = “{"username":"James", "password":"23"}” ; //这是一个json对象 Json = {"username":"James", "password":"23"};
3. JSON对象与JSON字符串 相互转换
在新版的浏览器里JSON对象已经被原生的内置对象了。
目前有2个静态方法:
JSON.parse用来将JSON字符串反序列化成对象;
JSON.stringify用来将对象序列化成JSON字符串;
非标准的IE不支持该对象,可以通过json2.js来实现同样的功能。将该文件下载到项目并引入。
// 这是JSON字符串,比如从AJAX获取字符串信息 var my_json_string = '{ "username": "Jamesl" }'; // 将字符串反序列化成对象 var my_obj = JSON.parse( my_json_string ); alert( my_obj.prop == 'Jamesl' ); // 提示 true, 和想象的一样! // 将对象序列化成JSON字符串 var my_other_json_string = JSON.stringify( my_obj );
4. 对象字面量与JSON的区别;
主要区别:
1. JSON语法格式要求更严格,所有属性名称和它的值都必须用双引号引住,不能使用单引号,而对象字面量可以由单引号或双引号包括;
2. 如果两者都是用双引号包括时,利用上下文关系来区分,{ "prop": "val" } 这样的声明有可能是JavaScript对象字面量也有可能是JSON字符串,取决于什么上下文使用它,如果是用在string上下文(用单引号或双引号引住,或者从text文件读取)的话,那它就是JSON字符串,如果是用在对象字面量上下文中,那它就是对象字面量。
// 这是JSON字符串 var foo = '{ "prop": "val" }'; // 这是对象字面量 var bar = { "prop": "val" };
详情请参见汤姆大叔文章:深入理解JavaScript系列(9):根本没有“JSON对象”这回事!