• 简谈JSON


    关于JSON,我们首先要了解的是它只是一种数据格式,不是一种编程语言,它从不属于JS,并不只有Js才使用JSON。

    1.语法

    JSON的语法,可以表示简单值,对象,数组,但它不支持变量,函数,实例对象,他就是一种表示结构化数据的格式

    (1)简单值

    最简单的JSON数据形式就是简单值,例如:5就是JSON表示数值5的方式;"Hello world"是表示字符串的方式,但在JSON中字符串必须要用双引号;此外还有布尔值,null值,但不支持undefined.

    (2)对象

    JSON对象表示对象的方式:

    {

      "name":"Tom",

      "age":18

    }

    与JS不同的是,JSON不需要声明变量,也没有分号结尾,并且对象的属性必须加双引号,属性值可以是简单值,也可以是复杂类型,因此可以这样在对象中嵌入对象

    {

      "name": "Tom",

      "age": 18,

      "friends": {

            "name": "Jerry",

            "age": 16

           }

    }

    (3)数组

    JSON数组采用的是JS中的数组字面量形式

    ["Tom",18,true]

    将数组与对象结合起来,可以构成更复杂的数据集合

    [
        {
            "name": "Tom",
            "age": 18,
            "friends":[
                "Jerry"
            ]
        },
        {
            "name": "Nancy",
            "age":16,
            "friends":[
                "Nicholas"
            ]
        },{
            "singer": "MC天佑",
            "age": "28",
            "example": [
                "一人我饮酒醉",
                "刀山火海"
            ]
        }
    ]

    2.解析与序列化

    JSON对象有两个方法:stringify()和parse(),分别用于将JS对象序列化为JSON对象和把JSON字符串解析为JS值

    var michael = {
        singer:"MC天佑",
        age:28,
        example:["一人我饮酒醉"]
    }
    var jsonText = JSON.stringify(book);

    上面这段代码就是将michael对象序列化为jsonText变量中,由于JSON.stringify()输出的JSON字符串不包含任何空格字符或缩进,因此保存在jsonText中的字符串如下所示:

      {"singer":"MC天佑","age":28,"example":["一人我饮酒醉"]}

    这个函数还可以接受两个参数,第一个参数是一个数组或者函数,第二个函数是一个选项,表示是否在JSON中保留缩进。

    如果参数是数组,那么结果就显示只包含数组中列出的属性

    var jsonText = JSON.stringify(michael,["singer","age"]);

    结果是{"singer":"MC天佑","age":28}。

    参数是函数时,函数要接受两个参数,键值和属性值,根据键值决定如何处理要洗泪花的对象中的属性

    var jsonText = JSON.stringify(michael,function(key,value){
        switch(key){
            case "example":
                return value.join(",");
            case "age":
                return 100
            case "singer":
                return undefined;
            default:
                return value;
        }
    });

    这里的结果是{"age":100,"example":"一人我饮酒醉"},这里根据传入的键来决定结果,其中我们发现如果返回的是undefined,那就删除该属性,最后一定要提供default,返回传入的值。

    第三个参数是控制结果中的缩进和空白符,如果是一个数字,那他表示每个级别缩进的空格数,最大的所金属为10,大于10的数会自动转为10,例如要早每个级别缩进4个空格

    var jsonText = JSON.stringify(michael,null,4);

    其结果就是

    {
        "singer": "MC天佑",
        "age": 28,
        "example": [
            "一人我饮酒醉"
        ]
    }

    如果传入的是字符串,那这个字符串就会用作缩进字符

    var jsonText = JSON.stringify(michael,null,"--");

    结果返回的是

    {
    --"singer": "MC天佑",
    --"age": 28,
    --"example": [
    ----"一人我饮酒醉"
    --]
    }

    在某些情况下,我们可以给对象定义toJSON()方法,返回自身的JSON数据格式

    var michael = {
        singer:"MC天佑",
        age:28,
        example:["一人我饮酒醉"],
        toJSON:function(){
            return this.singer;
        }
    }
    var jsonText = JSON.stringify(michael);

    这里返回的结果是singer的属性值

    使用JSON.parse()就可以将JSON字符串解析为相应的JS值

    var michaelCopy = JSON.parse(jsonText);

    虽然michaeal与michaelCopy有相同的属性,但他们是两个独立的、没有任何关系的对象

  • 相关阅读:
    "Principles of Reactive Programming" 之<Actors are Distributed> (3)
    Clojure语法学习-循环
    建立Clojure开发环境-使用IDEA和Leiningen
    速查笔记(Linux Shell编程<上>)
    Exception thrown in catch and finally clause
    linux fork的缺点
    redhat6.4 install 163 source
    linux /etc/hosts 配置问题
    linux sed
    STL 源码分析 (SGI版本, 侯捷著)
  • 原文地址:https://www.cnblogs.com/rongy/p/6718973.html
Copyright © 2020-2023  润新知