最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

鲜为人知的 JSON.stringify 用法

来源:懂视网 责编:小采 时间:2020-11-03 18:24:24
文档

鲜为人知的 JSON.stringify 用法

鲜为人知的 JSON.stringify 用法:JS 中有许多常见的函数,我们可能每天都在使用它们,但是却不知道它们的一些额外功能。JSON.stringify 就是这样的一个函数,今天就来看下它的特殊用法。基础JSON.stringify 方法接收一个变量,并将它转换成 JSON 表示形式。const boy = { na
推荐度:
导读鲜为人知的 JSON.stringify 用法:JS 中有许多常见的函数,我们可能每天都在使用它们,但是却不知道它们的一些额外功能。JSON.stringify 就是这样的一个函数,今天就来看下它的特殊用法。基础JSON.stringify 方法接收一个变量,并将它转换成 JSON 表示形式。const boy = { na
JS 中有许多常见的函数,我们可能每天都在使用它们,但是却不知道它们的一些额外功能。JSON.stringify 就是这样的一个函数,今天就来看下它的特殊用法。

基础

JSON.stringify 方法接收一个变量,并将它转换成 JSON 表示形式。

const boy = { 
 name: 'John', 
 age: 23 
};

JSON.stringify(boy);
// {"name":"John","age":23}

JSON 就是纯字符串,它本质上是 JS 的一个子集,所以并不是所有的 JS 对象都能转换为 JSON:

const boy = { 
 name: 'John', 
 age: 23,
 hobbies: new Map([[0, 'coding'], [1, 'earn money']])
}

JSON.stringify(boy)
// {"name":"John","age":23,"hobbies":{}}

上面的例子中 Map 对象就会被忽略并转换为普通对象。而如果属性是函数的话则这个属性就会被忽略,感兴趣的同学可以试下。

第二个参数

JSON.stringify 可以接收第二个参数,可以称为 replacer 替换器。

你可以传入一个字符串数组,这个数组中具有的属性才会被转换,就像一个白名单。

const boy = { 
 name: 'John', 
 age: 23
}

JSON.stringify(boy, ['name'])
// {"name":"John"}

我们可以利用这个特性,只转换需要转换的属性,过滤掉如很长的数组、错误对象等。

这个 replacer 参数还可以接收一个函数。这个函数会遍历整个对象,并将键和值传入,让你决定该如何替换它们。

const boy = { 
 name: 'John', 
 age: 23,
 hobbies: new Map([[0, 'coding'], [1, 'earn money']])
}

JSON.stringify(boy, (key, value) => {
 if (value instanceof Map) {
 return [...value.values()]
 }
 return value
})
// {"name":"John","age":23,"hobbies":["coding","earn money"]}

而如果你返回了 undefined (返回 null 不行),就将这个属性移除了:

JSON.stringify(boy, (key, value) => {
 if (typeof value === 'string') {
 return undefined
 }
 return value
})
// {"age":23,"hobbies":{}}

第三个参数

第三个参数 space 控制了转换后的 JSON 串的间距。

如果参数是数字,则以该数字个数的空格进行缩进:

JSON.stringify(boy, null, 2)
// {
// "name": "John",
// "age": 23,
// "hobbies": {}
// }

而如果参数是字符串,则以该字符串进行缩进:

JSON.stringify(boy, null, '--')
// {
// --"name": "John",
// --"age": 23,
// --"hobbies": {}
// }

toJSON 方法

如果我们要转换的对象具有一个 toJSON 方法,那么就可以定制自己被序列化的过程。您可以从方法中返回一个新值,而不是序列化该对象,并且此值将被序列化,而不是原始对象。

const boy = { 
 name: 'John', 
 age: 23,
 hobbies: new Map([[0, 'coding'], [1, 'earn money']]),
 toJSON() {
 return {
 name: `${this.name} (${this.age})`,
 favorite: this.hobbies.get(0)
 }
 }
}

JSON.stringify(boy)
// {"name":"John (23)","favorite":"coding"}

是不是很有趣?有时候仔细看一些文档还是很有用的~

参考文章

  • 原文地址:https://mp.weixin.qq.com/s/_e83_G7RjVt2eR_ro7blOA

  • MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

  • 本文来自 js教程 栏目,欢迎学习!

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    鲜为人知的 JSON.stringify 用法

    鲜为人知的 JSON.stringify 用法:JS 中有许多常见的函数,我们可能每天都在使用它们,但是却不知道它们的一些额外功能。JSON.stringify 就是这样的一个函数,今天就来看下它的特殊用法。基础JSON.stringify 方法接收一个变量,并将它转换成 JSON 表示形式。const boy = { na
    推荐度:
    标签: 使用 用法 js
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top