关于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有相同的属性,但他们是两个独立的、没有任何关系的对象

 

posted on 2017-04-16 15:56  EnochRy  阅读(388)  评论(0编辑  收藏  举报