文档章节

json - 序列化选项

lemos
 lemos
发布于 2016/11/23 22:30
字数 597
阅读 23
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

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) 如果提供了第三个参数,执行相应的格式化。

上一篇: json - 解析选项
下一篇: json - JSON对象
lemos
粉丝 10
博文 235
码字总数 108526
作品 0
芜湖
后端工程师
私信 提问
加载中
请先登录后再评论。
JSON学习笔记

JSON学习笔记 返回目录 目录   简述   一、语法     1.1 简单值     1.2 对象     1.3 数组   二、解析与序列化     2.1 JSON对象       2.2 序列化选项    ...

前端老手
2019/10/10
30
0
Python中的序列化和反序列化

为什么要序列化 内存中的字典、列表、集合以及各种对象,如何保存到一个文件中。 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列。所以必须把数据额转换为字...

osc_mneogccp
2018/11/12
2
0
JSON:结构化数据格式

  JSON是javascript的子类,也是作为更好的互联网传输结构化数据格式逐渐取代XML,因此要理解JSON,重要的是理解它是一种数据格式,不是一种编程语言。   语法    //javascript var o...

osc_9ow0lf0i
2019/09/19
1
0
学习笔记--json

语法 json是一种数据格式, 不是一种编程语言. json与js有相同的语法格式, 但是其并不从属于js. 并不是只有js才能使用json, 很多编程语言都有针对json的解析器和序列化器. json可以表示三种类...

伊缶瑞亚
2016/01/05
22
0
fastjson 1.1.9 发布

fastjson已转至github托管,地址。 Bug [FASTJSON-114] - Map对象反序列化处理@type特别属性行为不当 Improvement [FASTJSON-109] - 添加WriteSlashAsSpecial选项 [FASTJSON-110] - 设置Wri...

咖啡碼農
2011/11/04
1.3K
2

没有更多内容

加载失败,请刷新页面

加载更多

YGC问题排查,又让我涨姿势了!

在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务超时...

erlieStar
昨天
0
0
碰上这4种项目经理,项目必死无疑

项目经理不是谁想当就能当的,除了精通业务,至少懂一些基础的技术知识外,还要拥有“项目经理式的人格”。 比如:任务导向、目标意识、高效、灵活、计划性强等。 而与之相对的,有四种类型的...

logiter
2019/12/20
0
0
Oracle 11g 数据库的部署

新手入门之Oracle 11g部署 Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目...

开源仔
19分钟前
0
1
整理 Linux下列出目录内容的命令

在 Linux 中,有非常多的命令可以让我们用来执行各种各样的任务。当我们想要像使用文件浏览器一样列出一个目录下的内容时,大家第一时间想到的是 ls 命令。但只有 ls 命令能实现这个目的吗?...

osc_q7wo0k6s
19分钟前
16
0
漫画:什么是SnowFlake算法?

本文转载自公众号 [程序员小灰] ————— 第二天 ————— 方法一:UUID UUID是通用唯一识别码 (Universally Unique Identifier),在其他语言中也叫GUID,可以生成一个长度32位的全局唯一...

无敌码龙
2019/03/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部