JSON的解析与序列化

转自:json的解析与序列化

JSON是一种用于网络通信的轻量级的数据格式,它比XML更加简洁。JSON是JavaScript的一个严格的子集,但是JSON并不从属于JavaScript。

在ECMASCript 5对解析JSON的行为进行规范,定义了全局对象JSON,这个对象有两个方法

  • stringify(): 把一个JavaScript对象序列化为一个JSON字符串
  • parse(): 将一个JSON字符串解析为原生的JavaScript值

下面详解。

 

1. 解析与序列化

1.1 eval()

早期一般都是采用eval()来进行JSON解析,但是在旧版本的浏览器中,使用eval()对JSON数据结构求值存在风险,因为可能会执行一些恶意的代码。

1.2 stringify()

stringify()可以接收另外两个参数,可以用于以不同的方式序列化JavaScript对象。

  1. 第一个参数是过滤器,可以是一个数组,也可以是一个函数

    可以通过数组来指定序列化的属性

    1
    JSON.stringify(book, [“title”,“edition”]);

    通过函数也可以进行过滤

    1
    2
    3
    4
    5
    JSON.stringify(book, function(key, value){
    switch(key){
    // 进行处理
    }
    });
  2. 第二个参数是一个选项,表示是否在JSON字符串中保留缩进

    例如在每个级别缩进4个空格

    1
    JSON.stringify(book, null, 4);

1.3 toJSON()

在有些情况下,可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式,也可以为任何对象添加toJSON()方法。

例如Date对象就有一个toJSON方法,能够将JavaScript的Date对象自动转换成ISO日期字符串。

1.4 parse()

parse()还可以再接收一个函数作为参数,对每个键值进行过滤(又叫做还原)。在函数中返回undefined,则表示从结果中删除响应的键,如果返回其他值,则将该值插入到结果中。

例如将日期字符串转换为Date对象时,经常要用到

1
2
3
4
5
6
7
JSON.parse(jsonText, function(key, value){
if(key == “releaseDate”) {
return new Date(value);
} else {
return value;
}
});
此条目发表在web分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注