# JSON对象 至 已序列化的PHP对象 转换器

使用我们多功能的 PHP 序列化与反序列化工具，轻松在 PHP 中序列化和反序列化数据。这款在线工具非常适合希望将复杂数据结构转换为可存储字符串并还原为原始形式的开发者。无需安装软件，即可确保数据处理准确高效。使用这款易用可靠的工具，提升你的 PHP 开发工作流程。

## PHP 序列化器的作用

PHP 序列化器会将 JSON 转换为 PHP 的 serialize() 字符串格式，并将序列化字符串转换回格式化后的 JSON。序列化形式中的字符串长度按字节计算，因此含重音字母的值，其长度会大于字符数。

反序列化不会创建你所定义类的对象：对象会以 __PHP_Incomplete_Class 的形式返回，其类名保存在 __PHP_Incomplete_Class_Name 中，从而防止不可信输入运行代码。JSON 对象会变成键为字符串的 PHP 数组。

## 示例说明

### 将 JSON 转换为序列化字符串

a:4 是一个包含四个条目的数组，每个字符串都带有以字节为单位的长度。

**输入**

```
{"name": "Ada", "age": 36, "admin": true, "tags": ["php", "json"]}
```

**结果**

```
a:4:{s:4:"name";s:3:"Ada";s:3:"age";i:36;s:5:"admin";b:1;s:4:"tags";a:2:{i:0;s:3:"php";i:1;s:4:"json";}}
```

### 将序列化字符串转换为 JSON

Zürich 有 6 个字母，但在 UTF-8 中占 7 个字节，因此其长度为 s:7。

**输入**

```
a:2:{s:4:"city";s:7:"Zürich";s:3:"zip";s:4:"8001";}
```

**结果**

```
{
  "city": "Zürich",
  "zip": "8001"
}
```

### 序列化对象

该对象不会被重建为真正的 stdClass 实例。它的类名和属性会作为数据显示。

**输入**

```
O:8:"stdClass":1:{s:2:"id";i:7;}
```

**结果**

```
{
  "__PHP_Incomplete_Class_Name": "stdClass",
  "id": 7
}
```

## 序列化类型代码

| 代码 | 类型 | 示例 |
| --- | --- | --- |
| `N` | 空值 | `N;` |
| `b` | 布尔值，true 为 1，false 为 0 | `b:1;` |
| `i` | 整数 | `i:36;` |
| `d` | 浮点数 | `d:0.5;` |
| `s` | 字符串，长度以字节计算 | `s:3:"PHP";` |
| `a` | 数组，包含条目数以及键值对 | `a:1:{i:0;s:1:"x";}` |
| `O` | 对象，包含类名长度、类名和属性数 | `O:8:"stdClass":0:{}` |

## 常见问题

### 如何在 PHP 中序列化数据？

要在 PHP 中序列化数据，请将数据结构（数组、对象或标量值）输入提供的字段，然后点击“序列化”按钮。该工具使用 PHP 的序列化协议将复杂数据结构转换为可存储的字符串格式，生成可保存到文件、数据库或通过网络传输的表示形式。

### 如何用 PHP 反序列化数据？

要在 PHP 中反序列化数据，请将序列化字符串（通常以 a:、s: 或 O: 等格式标记开头）输入提供的字段，然后点击“反序列化”按钮。该工具会将字符串转换回原始数据结构，准确还原序列化前的数组、对象和值。

### 为什么序列化在 PHP 中很有用？

序列化会将复杂数据结构转换为可存储的字符串，可用于将数据持久化存储在文件或数据库中、通过网络传输数据、存储会话数据、实现缓存机制、构建消息队列负载，以及在请求之间保留对象状态。反序列化则可取回原始数据，以便继续使用。

### 哪些数据类型可以在 PHP 中序列化？

PHP 会序列化字符串、整数、浮点数、布尔值、数组、对象和 NULL 值。它会保留数组键、对象属性（公共、受保护、私有）、嵌套结构和数据类型。不过，资源（如数据库连接或文件句柄）无法序列化，需要特殊处理。

### 反序列化数据时是否有任何安全考虑？

是的，反序列化不可信数据时可能发生 PHP 对象注入攻击。攻击者可以构造恶意序列化字符串，通过魔术方法（__wakeup、__destruct）触发代码执行。切勿在未验证用户输入或外部数据的情况下调用 unserialize。对于不可信数据，请使用 JSON，或实现 allowed_classes 限制。

### 能否序列化和反序列化自定义对象？

是的，PHP 会序列化自定义对象，并保留所有属性及其值。不过，反序列化前必须加载类定义，才能正确重建对象。可使用自动加载、引入类文件，或实现 __sleep() 和 __wakeup() 魔术方法来实现自定义序列化行为。

### serialize() 和 JSON 有什么区别？

PHP serialize() 会保留精确的数据类型、私有/受保护属性和对象类信息，但只能在 PHP 中使用。JSON 与语言无关、易读、适用于网络，并可跨语言使用，但会丢失私有属性，也无法保留精确的 PHP 类型。仅在 PHP 中存储时使用 serialize()；用于 API 和互操作时使用 JSON。

### 如何使用序列化来存储会话数据？

PHP 会自动序列化会话数据（$_SESSION），以便在请求之间存储。将数组或对象存入会话时，PHP 会将其序列化并存入文件或数据库，然后在后续页面加载时反序列化。这样便可在访问不同页面期间保留用户状态、购物车和身份验证信息。

### 序列化数据可以存储在数据库中吗？

可以将序列化数据存储在数据库的 TEXT 或 BLOB 列中。不过，序列化数据不利于高效查询、索引和搜索。如果要将完整对象作为单个单元存储，可以使用序列化；如果需要查询单个字段或维护数据关系，则建议使用 JSON 或规范化表。

### 序列化的 PHP 数据是什么样的？

序列化数据使用格式前缀：s:5:"hello"（字符串）、i:42（整数）、a:2:{...}（数组）、O:4:"User"（对象）。数字表示长度或数量。这种格式紧凑，但不便于人类阅读。使用我们的工具，可在易读的 JSON 与 PHP 序列化格式之间转换，方便调试和处理数据。

### 如何调试序列化数据？

反序列化数据以检查其结构，对反序列化值使用 print_r() 或 var_dump()，转换为 JSON 以提高可读性，检查序列化是否不完整或损坏，验证对象类的可用性，以及使用我们的工具可视化和理解复杂的序列化结构。

### 可以序列化闭包或匿名函数吗？

标准的 PHP 序列化不支持闭包。请使用 Opis Closure 或 Laravel 的 SerializableClosure 等包来实现此功能。如果对象中的常规函数和方法是在类中定义的，它们就可以被序列化，但匿名函数需要特殊处理。

### 序列化的神奇方法有哪些？

__sleep() 在序列化前运行，并返回要序列化的属性数组（可用于排除特定数据）。__wakeup() 在反序列化后运行，用于初始化。__serialize() 和 __unserialize()（PHP 7.4+）提供了更多控制。可在类中实现这些方法以自定义序列化行为。

### 如何从序列化数据迁移到 JSON？

反序列化现有的 PHP 数据，将其转换为数组/ stdClass 对象，然后进行 JSON 编码。更新代码，使用 json_encode()/json_decode() 替代 serialize()/unserialize()。JSON 更安全、易读且兼容性更好，但会失去序列化所保留的私有属性和精确类型信息。

在这里投放广告？

[给我们发邮件](mailto:hi@dennn.is?subject=%E5%9C%A8%20OneClick%20Pro%20%E4%B8%8A%E6%8A%95%E6%94%BE%E5%B9%BF%E5%91%8A)

[广告 适用于 WordPress 的智能体就绪型插件套件。](https://sleekwp.com/?ref=oneclickpro)
