JSON

一、JSON的语法可以表示三个类型值:1.简单值 2.对象 3. 数组

二、JSON对象的表示方式

{
       "name" : "Lee",
       "age" : 100
       }

ps:与JavaScript的对象字面量相比,JSON对象有三个不一样:1.JSON没有声明变量。 2.没有末尾的分号。3.对象的属性必须加双引号。

三、JSON数组的表示方式

[
     {
         "title":"www",
         "authors": 1
                    },
      {
          "title":222,
           "authors":2
       },
       {
            "title":"ccc",
            "authors":3
         }
  ]

  var box = '[{"name":"a","age":1},{"name":"b","age":2}]';
  alert(box);//[{"name":"a","age":1},{"name":"b","age":2}]

四、JSON对象转换成JS对象: parse()方法

var json = JSON.parse(box);
alert(json);//[object object],[object object]
alert(box[0].title);

五、JS对象转换成JSON对象:stringify()

var box = [{name:"a",age:1},{name:"b",age:2}];  //JS对象
var json = JSON.stringify(box,['name','age'],4);
alert(box);
var box1 = [
                    {
                        name:"a",
                        age:1,
                        height:160
                    },
                    {
                        name:"b",
                        age:2,
                        height:160
                    }
               ];

                var json = JSON.stringify(box1);
                console.log(json); //[{"name":"a","age":1,"height":160},{"name":"b","age":2,"height":160}]

stringify()有三个参数:1.过滤器 2.数组/函数 3.要JSON字符串中保留的缩进数

  四、1.stringify()第二个参数,如果是数组,返回的是数组中的属性。

var json = JSON.stringify(box, ['name', 'age']);
console.log(json);//[{"name":"a","age":1},{"name":"b","age":2}]

 四、1.第二个参数是函数:此函数有两个参数分别是key(对应json对象的属性,value对应属性的值)。根据属性(键)名可以知道应该如何处理要序列化的对象中的属性。属性名只能是字符串,而值并非键值对儿结构的值时,键名可以是空字符串。

var json2 = JSON.stringify(box,function(key,value){
            if(key == "height"){
              return value + "cm";
          }
             else{
                    return value;
                  }
          });
         console.log(json2);//[{"name":"a","age":1,"height":"160cm"},{"name":"b","age":2,"height":"160cm"}]

PS:火狐3.5和3.6在最初支持JSON的时候stringify方法有个小BUG,执行function会出错
PS:现在火狐的版本是17.0,所以3.5和3.6的市场份额可以忽略不计,没必要单独兼容

四、3.字符串缩进:第三个参数用于控制结果中的缩进和空白符。
  参数是一个数字,它表示每个级别缩进的空格数。

var json3 = JSON.stringify(box, null, 4);
           alert(json3); 

参数是一个字符串而非数值,这个字符串将在JSON字符串中被用作缩进字符(不再使用空格)。在使用字符串的情况下,可以将缩进字符设置为制表符,或者两个短划线之类的任意字符。

var json4 = JSON.stringify(box, null, "--");
            alert(json4);

五、toJSON方法:使用toJSON方法实现stringify()不能实现的功能,toJSON()方法可以返回任何/指定序列化的值。

var test2 = [{
                name:"cc",
                age:26,
                height:180,
                toJSON:function(){
                    return this.name;
                }
            },
            {
                name:"bb",
                age:28,
                height:190,
                toJSON: function () {
                    return this.name + "," + this.age;
                }
            },{
                name:"aa",
                age:30,
                height:140,
                toJSON:function (){
                    return this.height;
                }
            }]
            var json5 = JSON.stringify(test2);
            console.log(json5); //["cc","bb,28",140]
            

            var book1 = {
                "title":"mmms",
                "authors":["ccc"],
                edition:3,
                year:2012,
                releaseDate: new Date(2013, 11, 1)
            };
            var jsonText = JSON.stringify(book1);
            var bookCopy = JSON.parse(jsonText, function(key, value){
                if(key == "releaseDate"){
                    return new Date(value);

                }else{
                    return value;
                }
            });
            console.log(bookCopy.releaseDate.getFullYear()); //2013

            var json = '[
                            {"title" : "a", "num" : 1},
                            {"title" : "b", "num" : 2}
                        ]';    
            var box = JSON.parse(json, function (key, value) {
                    if (key == 'title') {
                        return 'Mr.' + value;
                    } else {
                        return value;
                    }
                });
            alert(box[1].title);

--------------------------------------------end-------------------------------------

 

posted @ 2016-03-01 18:40  素雨雫晴  阅读(215)  评论(0编辑  收藏  举报