JSON学习笔记

JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量。

JSON使用Javascript的语法的子集表示对象,数组,字符串,数值,布尔值和null。

JSON的语法可以表示如下三种类型的值:

简单值:使用与Javascript相同的语法。可以在JSON中表示字符串,数值,布尔值和null。但JSON不支持Javascript的特殊值undefined

对象:表示一级无序的键值对。

数组:表示一级有序的列表,可以通过数值索引来访问其中的值。 数组的值也可以是任意 类型——简单值,对象或 数组

 

JSON不支持变量,函数或对象实例。它就是一种 表示结构化数据的格式。

 简单值 :

"Hello World!"

对象:

JSON中的对象 与JS字面量稍微有点不同。

字面量表示:

        var Object = {
            'name': 'Jin',
            'age': 29
        };

JSON:

{
    "name": "Jin",
    "age": 29
}
{
    "name":"Jin",
    "age":29,
    "school": {
        "name":"First school",
        "location":"sz"
    }
}

数组:

[
    {
        "title":"Professional Javascript",
        "authour":[
            "Nicholas"
        ],
        edition:3,
        year:2011
    },
    {
        "title": "Professional Javascript",
        "authour": [
            "Nicholas"
        ],
        edition: 3,
        year: 2009
    },{
        "title": "Professional Javascript",
        "authour": [
            "Nicholas"
        ],
        edition: 3,
        year: 2007
    }
]

解析与序列化:

books[2].title

JSON对象

JSON对象有两个方法:stringify()和parse().这两个方法分别用于把Javascript对象序列化为JSON字符串和

把JSON字符串解析为原生Javascript值。例如:

        var book = {
            title: "Professional Javascript",
            authors: [
                "Nichilas"
            ],
            edition: 3,
            year: 2011
        }
        var jsonText = JSON.stringify(book);
        var bookCopy = JSON.parse(jsonText);
        console.log(jsonText); //{"title":"Professional Javascript","authors":["Nichilas"],"edition":3,"year":2011}

序列化选项

JSON.stringify()还可以接收另外两个参数。第一个参数是过滤器,可以是一个数组。第二个参数是一个选项,表示是否存在JSON字符串中保留缩进。

        var book = {
            title: "Professional Javascript",
            authors: [
                "Nichilas"
            ],
            edition: 3,
            year: 2011
        }
        var jsonText = JSON.stringify(book, ["title", "edition"]);
        console.log(jsonText); //{"title":"Professional Javascript","edition":3}

字符串缩进

JSON.stringify()方法的第三个参数用于控制结果中的缩进和 空白符。

例如,要在每个级别缩进4个空格,可以这样写代码:

toJSON()方法

有时候,JSON.stringify()还是不能满足对某些对象进行自定义序列化的需求,可以给对象定义toJSON()方法,返回其自身的JSON数据格式。

        var book = {
            title: "Professional Javascript",
            authors: [
                "Nichilas"
            ],
            edition: 3,
            year: 2011,
            toJSON: function() {
                return this.title;
            }
        }
        var jsonText = JSON.stringify(book, null, 4);
        console.log(jsonText); //"Professional Javascript"

解析选项

JSON.prase()方法也可以接收另一个参数。该参数是一个函数。将在每个键值对儿上调用。为了区别JSON.stringify()接收替换(过滤)函数(replace),这个函数还被称为还原函数(reviver)。

它们接收两个参数,一 个键和一个值。都需要返回一个值。

如果还原函数返回undefined,则表示要从结果中删除相应的键;如果返回其他值,则将该值插入到 结果中。在将日期字符串转换为Date对象时,经常要用到还原函数。

    <script>
        var book = {
            "title": "Professional Javascript",
            "authors": [
                "Nicholas"
            ],
            edition: 3,
            year: 2011,
            releaseDate: new Date(2011, 11, 11)
        };

        var jsonText = JSON.stringify(book);

        var bookCopy = JSON.parse(jsonText, function(key, value) {
            if (key == "releaseDate") {
                return new Date(value);
            } else {
                return value;
            }
        })

        console.log(bookCopy.releaseDate.getFullYear()); //2011
    </script>

以上代码先是为book对象新增了一个releaseDate属性,该属性保存着一个Date对象。这个对象在经过序列化之后变成了有效的JSON字符串,然后经过解析双在bookCopy中还原为一个Date对象。还原函数在遇到releaseDate键时,会基于相应的值创建一个新的Date对象。结果就是bookCopy.releaseDate属性中会保存一个Date对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值