JavaScript 中的序列化和反序列化
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
作为开发者,我们经常听到Serialization“和”Deserialization这两个词,但这些术语到底是什么意思呢?
序列化
序列化是将数据结构(例如 JavaScript 对象或数组)转换为易于存储的格式的过程。
在 JavaScript 中,最常用的序列化格式是JSON(JavaScript 对象表示法)。JSON 格式易于人机读写。
JavaScript 中使用 JSON 进行序列化的示例:
const data = { name: "John", age: 30 };
const jsonString = JSON.stringify(data);
// Output: '{"name":"John","age":30}'
反序列化
反序列化是序列化的相反过程。它将序列化格式的数据转换为原始数据结构,例如 JavaScript 对象或数组,以使数据在应用程序中可用和可访问。
JavaScript 中使用 JSON 进行反序列化的示例:
const jsonString = '{"name":"John","age":30}';
const data = JSON.parse(jsonString);
// Output: { name: "John", age: 30 }
其他格式
除了 JSON 之外,还有许多其他序列化格式可用,如下所示:
生物科学
BSON 是一种二进制编码的数据交换格式,与 JSON 相比,它在存储和传输方面效率更高。它扩展了 JSON,添加了更多数据类型,通常用于 MongoDB 环境中。
使用bson包对 BSON 进行序列化和反序列化的示例:
import { BSON, ObjectId } from 'bson';
const data = { _id: new ObjectId(), name: "John", age: 30 }
// serialization
const bytes = BSON.serialize(data);
// Output: <Buffer 2e 00 00 00 07 5f 69 64 00 64 ca 53 01 9d 14 77 b6 a1 a2 89 e4 02 6e 61 6d 65 00 05 00 00 00 4a 6f 68 6e 00 10 61 67 65 00 1e 00 00 00 00>
// deserialization
const doc = BSON.deserialize(bytes);
// Output: {
// _id: new ObjectId("64ca53019d1477b6a1a289e4"),
// name: 'John',
// age: 30
// }
埃杰森
扩展 JSON (EJSON) 是 JSON 的超集,这意味着它包含了标准 JSON 的所有功能,并扩展了用于表示某些数据类型和 MongoDB 特定构造的附加约定。
使用bson包对 EJSON 进行序列化和反序列化的示例:
import { EJSON } from 'bson';
const data = { "_id": { "$oid": "613e8693499f15328a17e8b1" }, "name": "John", "age": 30 }
// serialization
const jsonString = EJSON.stringify(data, { relaxed: false });
// Output: '{"_id":{"$oid":"613e8693499f15328a17e8b1"},"name":"John","age":{"$numberInt":"30"}}'
// deserialization
const data = EJSON.stringify(data, { relaxed: false });
// Output: {
// _id: new ObjectId("613e8693499f15328a17e8b1"),
// name: 'John',
// age: new Int32(30)
// }
结论
总而言之,序列化是将数据转换为适合存储和传输的紧凑结构化格式的过程,而反序列化是将序列化数据转换回其原始格式的过程。
文章来源:https://dev.to/maafaishal/serialization-and-deserialization-in-javascript-3kdd