文档章节

json - 序列化选项

lemos
 lemos
发布于 2016/11/23 22:30
字数 597
阅读 2
收藏 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
粉丝 8
博文 184
码字总数 92482
作品 0
芜湖
后端工程师
私信 提问
fastjson 1.1.9 发布

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

咖啡碼農
2011/11/04
1K
2
JSON Binding API 简介

JSON Binding API 入门,第 1 部分 JSON Binding API 简介 了解 JSON-B 的默认特性和自定义注解、运行时配置等 Alex Theedom 2017 年 12 月 07 日发布 系列内容: 此内容是该系列 1 部分中的...

Alex Theedom
2017/12/07
0
0
彻底精通JSON

关于JSON,必须清晰的一点是它是一种数据结构,而非一种编程语言。属于看起来它与javascript有相同的语言格式,但是JSON并不从属于javascript。 其他语言也可以无障碍的使用JSON,因为他们拥有...

颜卿今天Coding了吗
2016/04/28
0
0
flatBuffer安装及使用教程

1、什么是flatBuffer: FlatBuffers为Google发布的一个跨平台,提供多种语言接口,注重性能和资源使用的序列化类库。目前该类库提供C++, C#, C, Go, Java, JavaScript, PHP, and Python语言接...

阿泽Aze
2018/05/30
0
0
JSON对象 javscript对象 解析JSON 序列化JSON

在ajax交互的时候我们只需要拿到数据(主要是JSON)去渲染处理逻辑就可以,不需要对JSON有详细的了解,但是有时候后台接口开发没有完成,需要写伪代码的时候我们可以自己手动造一些假数据,这样...

张超群的web之路
2016/10/30
24
0

没有更多内容

加载失败,请刷新页面

加载更多

全面理解Java内存模型(JMM)及volatile关键字

理解Java内存区域与Java内存模型 Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的...

亭子happy
11分钟前
1
0
Prometheus监控mysql实例--centos7安装mysql_exporter

目录 概述 环境准备 普罗米修斯简介 mysql安装 mysqld_exporter安装 启动参数列表 概述 prometheus(普罗米修斯) 是一个开源系统监控和报警工具包,许多公司和组织都采用了Prometheus,该项目...

java_龙
16分钟前
3
0
拥有2000家门店,他如何晋升为服装界的新宠?

摘要: —— iwarm3.0加热组件、碳纳米管膜炎、管状石墨结构体...你看到并不是一款高科技电子产品,这是快鱼服饰在这个冬天推出的黑科技产品 - 智能温控羽绒服。 在竞争激烈的服装行业,快鱼...

阿里云云栖社区
18分钟前
2
0
不忘初心 砥砺前行-智和信通2018年年会报道

1月18日,智和信通以“不忘初心 砥砺前行”为主题的2018总结会议暨2019年年会在京召开。年会以总经理李少龙的讲话为开场,充分肯定了全体员工2018年的工作和成绩,并表达了公司产品智和网管平...

智和网管平台
27分钟前
1
0
NGINX api网关

以谁为师
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部