基本使用
一般情况下,我们使用JSON.stringify
序列化对象,即将一个对象的属性和值转化为字符串
let obj = { name:“ken” };
JSON.stringify(obj ); //{'name':'ken'}
第二个参数
实际上并不是所有的JSON数据都能被序列化
const secondItem = {
title: 'Transformers',
year: 2007,
starring: new Map([[0, 'Shia LaBeouf'],[1, 'Megan Fox']])
};
JSON.stringify(secondItem);
// {'title':'Transformers','year':2007,'starring':{}}
可以通过传递第二个参数来解决,首先来看下第二个参数的作用
JSON.stringify(secondItem, ['title']);
// { 'title':'Transformers' }
将一个数组传递到第二个参数中,以数组中的元素作为键值返回一个新的JSON对象
我们也可以传递一个函数到第二个参数中
JSON.stringify(secondItem, (key, value) => {
if (value instanceof Set) {
return [...value.values()];
}
return value;
});
// {'title':'Transformers','year':2007,'starring':['Shia LaBeouf','Megan Fox']}
传入的这个函数,接收两个值,即JSON对象中对应的键值对。通过这个方式可以解决上述的部分数据不能被序列化的问题
第三个参数
JSON.stringify的第三个参数,用于控制序列比字符的间距(参数类型为数字,缩进的字符宽度)
JSON.stringify(secondItem, null, 2);
//{
// "title": "Transformers",
// "year": 2007,
// "starring": {}
//}
如果传递的是一个字符串,就会用字符串的内容替换掉空白的字符
JSON.stringify(secondItem, null, '?');
//{
//?"title": "Transformers",
//?"year": 2007,
//?"starring": {}
//}
toJSON方法
自定义stringify返回的内容
const thirdItem = {
title: 'Transformers',
year: 2007,
starring: new Map([[0, 'Shia LaBeouf'],[1, 'Megan Fox']]),
toJSON() {
return {
name: `${this.title} (${this.year})`,
actors: [...this.starring.values()]
};
}
};
console.log(JSON.stringify(thirdItem));
// {"name":"Transformers (2007)","actors":["Shia LaBeouf","Megan Fox"]}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。