js--JSON

1.什么是JSON

JSON:JavaScript Object Notation,javascript对象表示法;
JSON利用javascript的模式来表示结构化数据,但JSON不从属于javascript,只是一种数据格式,很多语言都有针对JSON的解析器和序列化器
JSON流行的原因
1.和js语法类似,容易理解
2.可以将JSON数据结构解析成有用的js对象

2.JSON语法

JSON的语法可以表示以下三种类型的值:
简单值:字符串、数值、布尔值、null,但不支持js的undefined
对象:表示一组无序的键值对儿
数组:有序的值得列表
JSON不支持变量,函数,对象实例,只是一种表示结构化数据的格式
JSON的对象

{
    "name":"wanghuan",
    "age":29,
    "school":{
        "name":"bupt",//虽有两个name,但是在不同对象中不影响
        "location":"beijing"
    }
}

与js对象字面量的不同:
1.对象属性必须加上””
2.无末尾的分号;
3.没有声明变量(json只是数据结构,没有变量的概念)
JSON的数组
[23,”wanghuan”,true]
与js数组字面量的不同:
1.无声明变量
2.无分号

//数组和对象结合出更复杂的数据集合
[
    {
        "title":"bupt",
        "author":"wanghuan",
        "year":2011
    },
    {
        "title":"bupt",
        "author":"wanghuan",
        "year":2011
    },
    {
        "title":"bupt",
        "author":"wanghuan",
        "year":2011
    }
]
3.序列化

JSON对象的方法:
stringify()
用于把js对象序列化为JSON字符串,默认情况下,此函数输出的JSON字符串不包含任何空格字符或缩进,同时会忽略js对象的函数和原型对象。
参数1:js对象

var book = {
    title:"bupt",
    author:["wanghuan"],
    year:2011
};
var jsonText = JSON.stringify(book);
//{"title":"bupt","author":["wanghuan"],"year":2011}

参数2:过滤器(可以是数组,也可以是函数),可选

var book = {
    title:"bupt",
    author:["wanghuan"],
    year:2011
};
var jsonText = JSON.stringify(book,["title","author"]);
//{"title":"bupt","author":["wanghuan"]}
var book = {
    title:"bupt",
    author:["wanghuan"],
    year:2011,
    edition:3
};
var jsonText = JSON.stringify(book,function(key,value) {
    switch(key){
        case "author":
            return value.join(",");//key为数组连接成一个字符串
        case "year":
            return 5000;
        case "edition":
            return undefined;//返回undefined删除此属性
        default:
            return value;//其他值正常显示
    }
});
//{"title":"bupt","author":"wanghuan","year":5000}

参数3:字符串缩进(可以是数值等),可选

var book = {
    title:"bupt",
    author:["wanghuan"],
    year:2011
};
var jsonText = JSON.stringify(book,null,4);
//jsonText为,缩进4个空格(自动包含换行符),最大缩进值是10个字符
{
    "title":"bupt",
    "author":["wanghuan"],
    "year":2011
}

toJSON()方法–对过滤器的补充
JSON.stringify()有时不能满足某些对象进行自定义序列化的需求,则给对象定义toJSON()方法

var book = {
    title:"bupt",
    author:["wanghuan"],
    year:2011,
    toJSON:function(){
        return this.title;
    }
};
var jsonText = JSON.stringify(book);

序列化对象的顺序
1.若存在toJSON()方法而且能通过它取得有效的值,则调用这个方法。否则,返回对象本身
2.如果提供了第二个参数,应用此函数过滤器。传入函数过滤器的值是第1步返回的值
3.对第2步返回的每个值进行相应的序列化
4.如果提供了第三个参数,执行相应的格式化

4.解析

parse()
把JSON字符串解析成原生js值
参数1:js对象

var bookCopy = JSON.parse(jsonText);
//book与bookCopy有相同属性,但是没关系的对象

参数2:函数,可选,将在每个键值对上调用

var book = {
    title:"bupt",
    author:["wanghuan"],
    year:2011,
    //此属性保存了一个Date对象
    releaseDate:new Date(2011,11,1) 
};
//Date对象在序列化之后变成了有效的JSON字符串
var jsonText = JSON.stringify(book);

var bookCopy = JSON.parse(jsonText,function(key,value){
    //解析在bookCopy中还原了一个Date对象,则bookCopy.releaseDate()属性中会保存一个Date对象
    if(key == "releaseDate") {
        return new Date(value);
    } else {
        return value;
    }
});
//因为已经是一个Date对象,可以调用getFullYear()
alert(bookCopy.releaseDate.getFullYear());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值