JSON简介

Posted Seal的学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON简介相关的知识,希望对你有一定的参考价值。

1. JSON(javascript Object Notation)是一种数据格式,而不是一种编程语言。JSON并不从属于JavaScript。


2. JSON可以表示以下三种类型的值:

  •     简单值:字符串、数值、布尔值和null。

    

  •     对象:对象作为一种复杂数据类型,表示的是一组无序的键值对。每个键值对中的值可以是简单值,也可以是复杂数据类型的值。

    

  •     数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值可以是简单类型,也可以是对象和数组。


3. JSON不支持变量、函数、或对象实例。


4. JSON简单值类型:数值,字符串,布尔值,null。其中,字符串需要使用双引号“”包含起来,不能使用单引号来括起字符串。


5. JSON对象:与JavaScript的字面量对象类似,但是JSON对象的属性需要用双引号括起来。


例如,JavaScript中的一个对象为:

    var object = {

        name: "seal",

        age: 26

    };

用JSON表示上述对象为:

    {

        "name": "seal",

        "age": 26

    }


6. JSON对象中还可以嵌套JSON对象,例如:

    {

        "name": "seal",

        "age": 26,

        "address": {

            "country": "China",

            "city": "Guangzhou"

        }

    }


7. JSON数组:采用JavaScript中数组的字面量形式,如JavaScript中的数组为:

    var anArray = [ 12, "seal", true, false ];


在JSON中表示为:

    [ 12, "seal", true, false ]


8. JSON可以将对象和数组结合起来,构建更复杂的数据。示例如下:

    [

        {

            "name": "seal",

            "age": 26,

            "address":[ "guangzhou", "shenzhen" ]

        } ,

        {

            "name":"tonseal",

            "age":28,

            "address":[ "beijing", "shanghai" ]

        }

    ]


9. JSON的解析与序列化:

  •     JSON对象有两个方法,stringify()和parse()。JSON.stringify()方法将JavaScript对象序列化为JSON字符串,JSON.parse()方法将JSON字符串解析为原生的JavaScript值。

    

  •     默认情况下,JSON.stringify()方法输出的JSON字符串不包含任何空格字符或缩进、所有函数和原型成员都被忽略,值为undefined的属性也被忽略。


示例代码:

    var person = {

        name : "seal",

        age: 26

    };

    var text = JSON.stringify(person);

    var person2 = JSON.parse(text);


运行效果:


10. 序列化选项:

    JSON.stringify()方法,参数可以有三个,即需要序列化的对象、要序列化的属性数组或过滤器函数、缩进的字符数。


例如,JSON.stringify(book, [ "name", "press" ]);表示序列化结果中只包含“name”和“press”这两个属性,没有缩进。


运行效果:

JSON简介


JSON.stringify(book, function( key, value ){

    statements…;

});

表示使用一个函数来过滤属性;如果过滤函数返回undefined,则序列化会忽略key对应的属性。JSON.stringify( book, null, 4);表示结果中每个级别缩进4个空格。


运行效果:


11. 如果JSON.stringify()函数不能满足使用,可以为任何对象添加toJSON()方法。


12. 序列化的顺序:

    A. 如果存在toJSON() 方法,且通过它能取得有效值,则调用该方法,否则返回对象本身;

    B. 如果提供了第二个参数,则应用其过滤器,传入过滤器的值是步骤A的返回值;

    C. 对B返回的每个值进行序列化;

    D. 如果提供了第三个参数,则执行相应的格式化。


13. 解析选项:

    JSON.parse()方法可以接收另一个参数,该参数为一个函数,应用在JSON对象的每个键值对上。该函数可以称为还原函数,其接收的参数也是(key, value)形式。


例如:

    var book3={

        name:"JavaScript高级程序设计", 

        author:"Nicholas C.Zakas", 

        press:"人民邮电出版社",

        publish_date: new Date(2017,10,1)

    };

    var jsonText = JSON.stringify(book3);

    

    var book3_2 =  JSON.parse( jsonText,  function ( key, value ){

        if ( key == "publish_date") {

            return new Date(value);

        } else {

                return value;

        }

    } );


运行效果:


(封面图片来源网络,侵删)

参考资料:

《Javascript高级程序设计》第三版,Nicholas C.Zakas著,李松峰、曹力译

以上是关于JSON简介的主要内容,如果未能解决你的问题,请参考以下文章

JSON 简介

JSON 简介

QT开发(六十一)———Json简介

JSON 简介

JSON 简介

JSON 简介及解析