JSON

JSON(JavaScript Object Notation)javascript对象表示法,它是一种数据格式而不是语言。
JSON利用JavaScript的一些模式来表示结构化数据。
JSON是一个轻量级的数据格式


【JSON语法】

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

1. 简单值(String、Number、Boolean、null)但不支持undefined
2. 对象(表示一组无序的键值对)
3. 数组(表示一组有序的值的列表)

JSON不支持变量、函数、对象实例。
1.【简单值】
JSON表示字符串时,必须使用双引号
2.【对象】
JSON表示对象时,属性要加引号

{
    "属性0": 值,
    "属性1":值,
}

与JS对象字面量

var object = {
    "属性0": 值,
    "属性1":值
};

相比,不同点在:

a. 没有声明变量
b. 花括号后面没有分号
c. 属性名必须加引号

3.【数组】
用中括号把元素集合在一起: [元素1,元素2,元素3……]
与JS数组相比:

a. 没有声明变量
b. 中括号后面没有分号

【JSON对象】

JSON对象有两个方法:

a. stringify(JS对象) //把JS对象序列化为JSON字符串
b. parse(JSON字符串) //解析为原生JavaScript值

【序列化为JSON】

在序列化JS对象时,函数和原型成员和值为undefined的属性会被忽略,结果都是那些值为有效的JSON数据类型的属性

JSON.stringify(属性1,属性2,属性3)

属性1:JS对象
属性2:过滤器(数组或函数),结果只会返回包含在数组里的属性或按函数指示的属性和值
属性3:控制结果中缩进的个数或缩进的显示类型(数值或字符串),最大缩进空格数为10。若没有属性3,
则默认输出的JSON字符串没有空格或缩进。
//JS对象
var book = {
    "title":"JSON",
    "author":"karine",
    "year":2017,
    "content":["html","css","javascript"]
};

//序列化
var jsonText0 = JSON.stringify(book);     //{"title":"JSON","author":"karine","year":2017,"content":["html","css","javascript"]}
var jsonText1 = JSON.stringify(book,["author","year"]);
//{"author":"karine","year":2017}
var jsonText2 = JSON.stringify(book,["author","year"],4);
// {
      "author": "karine",
      "year": 2017
  }

给JS对象添加toJSON()方法,只会返回toJSON方法里描述的自身的JSON数据格式。JS对象会被序列化为一个简单的字符串而不是JSON对象
toJSON()可以返回任意指定的值,undefined也可以。

var book1 = {
    "title":"JSON",
    "author":"karine",
    "year":2017,
    "content":["html","css","javascript"],
    toJSON:function () {
        return this.author;
    }
};
var jsonText = JSON.stringify(book1);  //"karine"

【使用JSON.stringify序列化对象的顺序】

1. 若存在toJSON()方法,则调用该方法返回值;否则返回对象本身
2. 若存在参数2,应用该过滤器,传入过滤器的值是第1步返回的值
3. 对第2步返回的每个值进行相应的序列化
4. 若存在参数3,执行相应的格式化

【解析JSON】

1. JSON.parse(JSON,还原函数)
若还原函数返回undefined,则在结果中删除相应的属性;若返回其他值,则将其插入到结果中。

//JS对象
var book = {
    "title":"JSON",
    "author":"karine",
    "year":2017,
    "content":["html","css","javascript"],
    releaseDate:new Date(2017,7,22)
};
//序列化
var jsonText = JSON.stringify(book);  

//解析
var jsonText4 = JSON.parse(jsonText,function(key,value){
    if(key == "releaseDate"){
        return new Date(value);   //把序列化后的字符串还原解析为Date对象
    }
    else if(key =="year"){
        return undefined; //会删除"year"
    }
    else{
        return value;
    }
});

//jsonText4输出值:
{   title: 'JSON',
    author: 'karine',
    content: [ 'html', 'css', 'javascript' ],
    releaseDate: 2017-08-21T16:00:00.000Z 
}

2.eval(json)
eval()也可以将json字符串解析成js对象(非标准的也可以,没有JSON.parse()要求严格,就算属性名不加双引号也可以执行)

JSON.parse('{name:"karine"}'); //SyntaxError:Unexpected token n in JSON

eval('{name:"karine"}'); //成功执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值