序列化
序列化(serialize)是把内存中的数据结构或对象,转换成可以存储或传输的格式(通常是字节流或字符串)的过程;把这些数据还原成对象则叫反序列化(deserialize)。程序运行时的对象只存在于内存里,无法直接写入文件或通过网络发送,序列化就是给它们找一种"可落地、可传输"的中间表示。
常见的序列化格式大致分两类:
- 文本格式:
JSON、XML、YAML,人可读、跨语言,调试方便; - 二进制格式:
Protobuf、MessagePack,体积小、解析快,但不便直接阅读。
此外 PHP 还有自带的 serialize() 格式。典型用途包括接口传参、缓存、消息队列和持久化存储。使用时要避开几个误区:序列化不是加密,JSON 里的内容任何人都能读,别拿它保护敏感数据;并非所有值都能序列化,JSON 无法表达函数和循环引用,undefined 也会被丢弃;不同语言与格式对日期、大整数、浮点精度的处理并不一致,跨系统传输前最好先约定好规则。
常见问题
序列化和反序列化有什么区别?
序列化是把内存中的对象转成可存储、可传输的字符串或字节流;反序列化是相反过程,把这些数据重新还原成程序能直接使用的对象。
序列化能保证数据安全吗?
不能。序列化只负责格式转换,本身不做加密,像 JSON 这类文本格式内容都是明文可读的。需要安全性得另外配合加密或签名。
为什么对象转成 JSON 后有些字段不见了?
因为 JSON 无法表达函数、undefined、循环引用等,这些值会被忽略或直接报错。此外日期、大整数也可能被转成字符串或丢失精度,需要手动约定处理方式。