从JSON对象中序列化特定属性
JSON.stringify()
的默认行为是从给定对象中提取所有可序列化的属性。然而,有许多情况下,你可能只想从对象中选择特定的键。这个问题可以通过JSON.stringify()
的第二个参数来处理,可以传递一个键的数组或一个替换函数。
键的数组
键的数组允许你选择要包含在对象的字符串化版本中的特定键。当你知道所需序列化对象的确切形状时,这特别有用。
const user = {
id: 1234,
username: 'johnsmith',
name: 'John Smith',
age: 39
};
JSON.stringify(user, ['username', 'name']);
// '{ "username": "johnsmith", "name": "John Smith" }'
替换函数
替换函数比键的数组更灵活,它接受键和值作为参数。除了用它来包含或排除键之外,它还可以在对象的字符串化表示中改变每个键的值,非常有用。为了让一个键包含在输出中,替换函数必须返回一个可序列化的值(字符串、数字、布尔值、null或对象)。
class Point {
constructor (x, y) {
this.x = x;
this. y = y;
}
}
const target = {
id: 1234,
location: new Point(10, 20),
name: 'Delivery point',
};
JSON.stringify(target, (key, value) => {
// 排除id
if (key === 'id') return undefined;
// 将location转换为坐标数组
if (value instanceof Point) return [value.x, value.y];
// 返回其他属性(例如name)不做修改
return value;
});
// '{ "location": [10, 20], "name": "Delivery point" }'