json - 序列化选项
json - 序列化选项
中柠檬 发表于12个月前
json - 序列化选项
  • 发表于 12个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

JSON.stringify() 除了序列化 js对象外,还可以传入两个参数: 第一个 参数是一个过滤器,可以是一个函数,也可以是一个数组。 第二个参数是一个选项,表示是否在json中保持缩进。


1. 过滤结果

  • 这个例子中,传入了一个数组参数。表示只序列化在数组中列出的值。
var book = {
    "title": "Profession JavaScript",
    "authors": [
        "NIcholas C. Zakas"
    ],
    editon:3,
    year:2011
};

var jsonText = JSON.stringify(book, ["title", "edition"]);

console.log(jsonText);
  • 这个例子,传入了一个函数作为参数,表示按照函数中的处理方式进行序列化。(形参为 (key,value)。 其中, key只能是字符串,当数据结构不是键值对结构时,可以将key设为空字符串。
var jsonText = JSON.stringify(book, function (key, value) {
    switch (key) {
        case "authors":
            return value.join(",");
        case "year":
            return 5000;
        case "edition":
            return undefined;
        default:
            return value;
    }
});

console.log(jsonText);

2. 字符串缩进

  • JSON.stringify() 的第三个参数用于控制结果中的缩进和空白符。 如果这个参数是一个数值,表示每个级别缩进的空格数。(最大缩进空格数是10)
var book = {
    "title": "Profession JavaScript",
    "authors": [
        "NIcholas C. Zakas"
    ],
    editon: 3,
    year: 2011
};


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

console.log(jsonText);
  • 如果缩进参数是一个字符串,而非一个数值。那么,这个字符串将被用作缩进符,而非空格。缩进字符可以设置为制表符、- - 或者其他任意字符。(注意,缩进字符串不得超过10个字符长。)
var book = {
    "title": "Profession JavaScript",
    "authors": [
        "NIcholas C. Zakas"
    ],
    editon: 3,
    year: 2011
};


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

console.log(jsonText);

3. toJSON() 方法

  • 在某些情况下,可以通过在对象中调用toJSON( ) 方法,可以返回自身的json数据格式。 比如,原生Date对象上有一个toJSON( ) 方法,可以将js的Date对象转换成 ISO 8601 日期字符串。(这与在Date 对象上调用 toISOString( ) 的结果一样。
var book = {
    "title": "Profession JavaScript",
    "authors": [
        "NIcholas C. Zakas"
    ],
    edition: 3,
    date: new Date(),
    year: 2011,
    toJSON: function () {
        return this.title +","+ this.date;
    }
};

var jsonText = JSON.stringify(book);

console.log(jsonText);

4. 序列化对象的执行顺序

(1) 如果存在toJSON( ) 方法,且能通过它获取有效的值,则调用该方法。否则,按默认顺序执行序列化。
(2) 如果提供了第二个参数,则把(1)中得到的值传入这个函数过滤器。
(3) 如果提供了第三个参数,执行相应的格式化。

  • 点赞
  • 收藏
  • 分享
粉丝 7
博文 177
码字总数 83541