📅  最后修改于: 2023-12-03 14:49:17.997000             🧑  作者: Mango
在 JavaScript 中,我们可以通过使用 JSON.stringify 将 JSON 对象转化为字符串。但是,有时候我们需要在转化的过程中过滤一些属性,这时该怎么做呢?
JSON.stringify 方法有一个可选的第二个参数 replacer,它可以是一个函数或数组。如果 replacer 是函数,则该函数将在转换过程中每遇到一个属性都会被调用,然后根据返回的值来控制这个属性是否被序列化。如果 replacer 是数组,则只有包含在这个数组里的属性才会被序列化。
示例代码:
const user = {
name: 'Tom',
age: 20,
address: {
street: 'No.1 Road',
city: 'Beijing'
}
};
const replacer = (key, value) => {
if (key === 'address') {
return undefined;
}
return value;
};
const result = JSON.stringify(user, replacer);
console.log(result); // {"name":"Tom","age":20}
在上面的示例代码中,我们定义了一个 replacer 函数,它的作用是过滤掉属性名为 'address' 的属性。然后我们调用 JSON.stringify 方法,并将其第二个参数设为这个 replacer 函数。输出的结果就会是 {"name":"Tom","age":20},属性 'address' 已经被过滤掉了。
JSON.stringify 方法在序列化一个对象时,会先尝试调用对象的 toJSON 方法。所以,如果我们想要过滤掉某些属性,可以在对象中定义一个 toJSON 方法,然后返回一个取代它表示该对象的 JSON 值的值。
示例代码:
const user = {
name: 'Tom',
age: 20,
address: {
street: 'No.1 Road',
city: 'Beijing'
},
toJSON: function () {
return {
name: this.name,
age: this.age
};
}
};
const result = JSON.stringify(user);
console.log(result); // {"name":"Tom","age":20}
在上面的示例代码中,我们定义了一个 toJSON 方法,它的作用也是过滤掉属性 'address'。然后我们调用 JSON.stringify 方法,并将其参数设为对象 user。输出的结果就会是 {"name":"Tom","age":20},属性 'address' 已经被过滤掉了。
以上就是两种从 JSON.stringify 中排除属性的方法。第一种方法适用于需要在序列化过程中动态控制需要排除的属性的场景,而第二种方法适用于对象本身就有一个特殊用途的场景。