序列化选项:
JSON.stringify()
:把一个js对象转换为JSON字符串
要接受的参数除了js对象外,还可以接收两个参数:
- 第一个参数是过滤器,可以是一个数组,也可以是一个函数
- 第二个参数是一个选项,便是是否在JSON字符串中保留缩进
过滤器
1 | const book = { |
参数为一个数组时
1 | const jsonText = JSON.stringify(book, ["title", "year"]); |
输出结果为: {"title":"web前端基础","year":2020}
参数为函数时
传入的函数接收两个参数,属性(键)名和属性值。根据属性(键)名可以知道应该如何处理要序列化的对象中的属性,属性名只能是字符串,而在值并非键值对儿结构的值时,键名可以是空字符串为了改变序列化对象的结果,函数返回的值就是相应键的值。不过要注意,如果函数返回了undefined,那么相应的属性就会被忽略。
1 | const jsonText2 = JSON.stringify(book, function(key, value) { |
输出结果为:{"title":"web前端基础","authors":"csgo-rush-b","year":"2020年出版"}
字符串缩进
如果这个参数是一个数值,那它表示的是每个级别缩进的空格数。最大缩进空格为10,大于10会自动转换为10
1 | const jsonText3 = JSON.stringify(book, null, 4); |
输出结果为:
1 | { |
如果缩进参数是一个字符串而非数值,则这个字符串将在JSON字符串中被用作缩进字符(不再使用空格)超过10个,自动转换为10
1 | const jsonText4 = JSON.stringify(book, null, "---"); |
输出结果为:
1 | { |
JSON.toJSON()
有时候
JSON.stringify()
还是不能满足对某些对象进行自定义序列化的需求。可以使用toJSON()
,返回其自身的JSON数据格式。
1 | const book2 = { |
输出结果为:
1 | "js高级程序设计(第三版)" |