js JSON

1.基本语法

json的语法可以表示为三种类型的值

1.简单值:适用于js相同的语法,可以在json中表示字符串、数值、布尔值和null,但是不支持undefined。

  • json字符串与js字符串最大的不同是在json中字符串

2.对象:表示一组无序的键值对。

{
    "name":"lucy",
    "age":"22"
}

与js中的字面量不同,json中的对象不需要声明(json中没有变量的概念),其次,没有末尾的分号。

3.数组:表示一组有组的值的列表。

["hi",25,"js"]

把数组和对象结合起来,就能构成更复杂的数据集合。

2.序列化JSON

stringify方法,主要用于把JavaScript对象序列化为json字符串。

var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book);
    console.log(jsonText);

/*运行结果,不包含任何空格或缩进*/
//{"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3,"year":2011}

该方法还可以接受参数,两个参数用于以不同的方式序列化JavaScript对象。第一个参数是一个过滤器,可以是数组,也可以是函数。第二个参数是一个选项,用来表示是否在JSON对象中保留缩进。

1、过滤器参数为数组。

var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011
    }

    var jsonText = JSON.stringify(book,["title","edition"]);

/*运行结果,只包括数组中的项*/
//{"title":"Professional JavaScript","edition":3}

2.过滤器参数为函数。

var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011
    }
var jsonText = JSON.stringify(book, function (key,value) {
///如果返回的值为undefined,则相应的属性会被忽略掉
   switch(key){
       case "authors":
           return value.join(',');
       case "edition":
           return undefined;
       case "year":
           return 5000;
       default : //如果不设置default的值,其他的属性有可能会被忽略掉
           return value;
   }

});

console.log(jsonText);

//{"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000}

3.字符串缩进

 var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011
    }
    var jsonText = JSON.stringify(book, null, 4);
    console.log(jsonText);
//    {
//        "title": "Professional JavaScript",
//            "authors": [
//        "Nicholas C. Zakas"
//    ],
//            "edition": 3,
//            "year": 2011
//    }

4.toJSON()方法:

可以为任何对象添加toJSON方法。可以作为过滤器的补充。

 var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011,
        toJSON: function () {
            return this.title;
        }
    }
    var jsonText = JSON.stringify(book);
    console.log(jsonText);//"Professional JavaScript"

序列化的内部顺序:

1,如果存在toJSON()方法并且能通过他取得有效的值,则调用该方法。否则,返回对象本身。
2.如果存在第二个参数,应用过滤器,传入过滤器的值应该为第一步得到的值。
3.对第二部得到的结果进行序列化。
4.如果提供了第三个参数,执行相应的序列化。

3.解析JSON

JSON.parse()方法:将JSON字符串解析为原生的javaScript值。也可以接受一个参数,这个参数是一个函数,可以在每一对键值对上进行调用。

 var book = {
        title:"Professional JavaScript",
        authors:[
                "Nicholas C. Zakas"
        ],
        edition:3,
        year:2011,
        relaseDate:new Date(2016,11,11)
    }
    var jsonText = JSON.stringify(book);
    var bookCopy = JSON.parse(jsonText, function (key,value) {
        if(key == 'relaseDate'){
            return new Date(value);
        }else{
            return value;
        }
    });
    console.log(bookCopy);

运行结果::

这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章