下面是 JavaScript 中的对象序列化介绍的完整攻略。
概念解释
序列化是将一个对象转换成一个字符串或者字符流的过程,以便于存储和传输。在 JavaScript 中,我们通常使用 JSON(JavaScript Object Notation)进行序列化和解析,JSON 模块已经被包含在所有现代浏览器中了。
JSON.stringify()
JSON.stringify() 方法能够将一个 JavaScript 对象转为一个 JSON 字符串,语法如下:
JSON.stringify(value[, replacer[, space]])
其中,value
是需要序列化的值,可以是任何 JavaScript 数据类型;replacer
是可选的,可以是一个函数或字符数组,用于决定序列化时要忽略哪些属性或如何转换属性的值;space
也是可选的,用于决定如何缩进生成的文本。
下面是一个示例:
let obj = { name: "John", age: 30, city: "New York" };
let json = JSON.stringify(obj);
console.log(json); // Output: {"name":"John","age":30,"city":"New York"}
JSON.parse()
JSON.parse() 方法能够将一个 JSON 字符串转为一个 JavaScript 对象,语法如下:
JSON.parse(text[, reviver])
其中,text
是需要解析的 JSON 字符串;reviver
是可选的,可以是一个函数,用于决定如何变换解析出来的属性值所对应的键值对。
下面是一个示例:
let json = '{"name":"John","age":30,"city":"New York"}';
let obj = JSON.parse(json);
console.log(obj); // Output: { name: "John", age: 30, city: "New York" }
序列化 Date 对象
在序列化 Date 对象时,需要使用 toJSON() 方法,该方法会将 Date 对象转为一个 ISO 格式的字符串,可以被 JSON.stringify() 序列化,例如:
let obj = { name: "John", birthdate: new Date('2021-01-01') };
let json = JSON.stringify(obj, (key, value) => {
if (value instanceof Date) {
return value.toJSON();
}
return value;
});
console.log(json); // Output: {"name":"John","birthdate":"2021-01-01T00:00:00.000Z"}
解析出来的 JSON 字符串中的 birthdate
属性为一个 ISO 格式的字符串,可以通过 Date 构造函数将其还原为一个 Date 对象:
let obj = JSON.parse(json, (key, value) => {
if (key === "birthdate") {
return new Date(value);
}
return value;
});
console.log(obj); // Output: { name: "John", birthdate: Date('2021-01-01T00:00:00.000Z') }
序列化自定义类的对象
默认情况下,对于一个自定义类的对象,JSON.stringify() 方法只会序列化对象中的属性,不会序列化对象的方法。如果需要序列化对象的方法,可以在对象上实现 toJSON() 方法,例如:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
toString() {
return `${this.name} is ${this.age} years old`;
}
toJSON() {
return { name: this.name, age: this.age, description: this.toString() };
}
}
let obj = new Person('John', 30);
let json = JSON.stringify(obj);
console.log(json); // Output: {"name":"John","age":30,"description":"John is 30 years old"}
let obj2 = JSON.parse(json);
console.log(obj2); // Output: { name: "John", age: 30, description: "John is 30 years old" }
在这个示例中,Person 类实现了 toJSON() 方法,在此方法中将对象转为一个包含了 name
、age
和 description
属性的纯对象,序列化和解析出来的 JSON 字符串中也包含了 description
属性。
以上就是 JavaScript 中的对象序列化介绍的完整攻略,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中的对象序列化介绍 - Python技术站