📅  最后修改于: 2023-12-03 15:40:46.453000             🧑  作者: Mango
在编写 Javascript 的过程中,我们经常需要将一个对象或者数组序列化为字符串。这个过程叫做序列化 (Serialization)。序列化后的字符串可以通过网络或者存储到本地文件中。为了实现更加复杂的功能,我们需要向序列化的操作中添加一些参数。这篇文章将会介绍如何添加参数以序列化 Javascript。
在 Javascript 中,我们可以使用 JSON.stringify()
方法将一个对象或者数组序列化为字符串。
let obj = {
name: 'John',
age: 30,
city: 'New York'
};
let jsonString = JSON.stringify(obj);
console.log(jsonString); // {"name":"John","age":30,"city":"New York"}
JSON.stringify() 方法有三个可选的参数,可以控制序列化的行为。这些参数的详细解释在下面的列表中。
replacer 参数可以是一个函数或者数组。这个参数用来过滤掉对象中的属性或者调整序列化的值。如果 replacer 是一个函数,该函数将被调用来处理对象中每个属性的值。如果 replacer 是一个数组,它可以只序列化数组中指定的属性。
以下是 replacer 参数的例子。
let obj = {
name: 'John',
age: 30,
city: 'New York'
};
let jsonString = JSON.stringify(obj, ['name', 'city']);
console.log(jsonString); // {"name":"John","city":"New York"}
在这个例子中,只有 name
和 city
属性被序列化了。如果使用 replacer 函数,可以添加更多的行为。
let obj = {
name: 'John',
age: 30,
city: 'New York'
};
let jsonString = JSON.stringify(obj, (key, value) => {
if (key === 'name') {
return value.toUpperCase();
} else {
return value;
}
});
console.log(jsonString); // {"name":"JOHN","age":30,"city":"New York"}
在这个例子中,replacer 函数将 name
属性的值转换为大写,其他属性的值保持原样。
space 参数用于添加缩进,使序列化后的字符串更加易读。
以下是 space 参数的例子。
let obj = {
name: 'John',
age: 30,
city: 'New York',
children: ['Anna', 'Peter']
};
let jsonString = JSON.stringify(obj, null, 2);
console.log(jsonString);
/*
{
"name": "John",
"age": 30,
"city": "New York",
"children": [
"Anna",
"Peter"
]
}
*/
在这个例子中,使用了 space 参数,并指定缩进为 2 个空格。
toJSON 方法在对象调用 JSON.stringify() 方法时被调用。它可以用来序列化对象的值。如果 toJSON 方法返回对象,序列化后的字符串将使用 toJSON 方法返回的对象属性和值。
以下是 toJSON 方法的例子。
let obj = {
name: 'John',
age: 30,
toJSON: function() {
return {
name: this.name,
age: this.age
};
}
};
let jsonString = JSON.stringify(obj);
console.log(jsonString); // {"name":"John","age":30}
在这个例子中,对象上的 toJSON 方法返回一个对象,只包含 name 和 age 属性。这个方法在序列化时调用,导致了只有这两个属性被序列化了。
添加参数以序列化 Javascript 对象或者数组是一个很常见的操作。通过使用 replacer、space 和 toJSON 参数,我们可以精细地控制序列化的结果。在实际开发中,特别是和数据交互相关的功能,需要熟练掌握序列化的各种用法。