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对象”这回事!

posted @ 2015-07-29 16:24  331415706  阅读(309)  评论(0编辑  收藏  举报