Tool Kumar 工具
JSON 转 PHP 类
生成适用于 PHP 8.1 及更高版本的类,通过构造函数属性提升定义带类型的 readonly 属性。每个类都有一个 fromArray 方法,负责映射原始 JSON 键名并构建嵌套对象。
如何使用这个工具
- 粘贴一份有代表性的响应,其中应包含字段存在差异的记录。
- 检查生成的输出,必要时修改根名称。
- 复制或下载代码,然后对照你的 API 契约检查类型。
示例演示
以下输出来自内置转换器。两个数组元素的 price 值用于推断浮点型字段;note 值分别为 null 和字符串,因此推断为可空字段。
输入
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}输出
<?php
declare(strict_types=1);
final class Root
{
public function __construct(
public readonly int $userId,
public readonly Profile $profile,
/** @var Item[] */
public readonly array $items,
) {
}
public static function fromArray(array $data): self
{
return new self(
userId: $data['user-id'],
profile: Profile::fromArray($data['profile']),
items: array_map(static fn ($x) => Item::fromArray($x), $data['items']),
);
}
}
final class Profile
{
public function __construct(
public readonly string $city,
public readonly string $createdAt,
) {
}
public static function fromArray(array $data): self
{
return new self(
city: $data['city'],
createdAt: $data['created_at'],
);
}
}
final class Item
{
public function __construct(
public readonly float $price,
public readonly ?string $note,
) {
}
public static function fromArray(array $data): self
{
return new self(
price: $data['price'],
note: $data['note'],
);
}
}
选择数组还是带类型的模型
如果只需要 PHP 关联数组,用 json_decode 并传入 true 就够了。要使用生成的模型,把这个数组传给 Root::fromArray。JSON_THROW_ON_ERROR 会报告格式错误的输入。
如果某个 ID 超过 PHP_INT_MAX,JSON_BIGINT_AS_STRING 可以保留它的全部数字,但你必须把生成的对应 float 属性改为 string。推断出的 float 不是精确的 ID 类型。
$data = json_decode($responseBody, true, 512, JSON_THROW_ON_ERROR);
$model = Root::fromArray($data);选项与特殊情况
- 输出以 declare(strict_types=1) 开头,生成 final 类。嵌套的对象数组带有 PHPDoc 元素类型,并通过 array_map 构建。
- 可空值使用 ?type;只出现过 null 或类型混合的字段使用 mixed。日期保持为 string。
- 整数使用 int,超出有符号 64 位范围的整数使用 float,这可能丢失精度。请检查 PHP 平台的限制,必要时把大 ID 解码为字符串。
- 没有实现 toArray 或 JsonSerializable。如果编码这些类时需要原始 JSON 键名,请自行添加显式的序列化逻辑。
默认保护隐私
你的文档只保留在这个浏览器中。Tool Kumar 在你的设备上解析、转换并生成下载文件,无需账号,也没有上传步骤。
JSON 转 PHP 类:常见问题
- 可以把 JSON 转换为 PHP 关联数组吗?
- 可以,用 PHP 本身就能做到:json_decode($json, true, 512, JSON_THROW_ON_ERROR)。这个生成器输出的是带类型的模型类,而不是 PHP 数组字面量。
- 生成的代码需要哪个 PHP 版本?
- 构造函数提升的 readonly 属性需要 PHP 8.1 或更高版本。输出还用到了类型化属性、命名参数和 strict_types。
- 嵌套对象如何变成类?
- fromArray 会调用嵌套类的 fromArray 方法。嵌套对象数组使用 array_map,元素类型记录在 PHPDoc 中。
- 编码回 JSON 时会保留原始键名吗?
- fromArray 方法保留了输入的映射关系。但输出中没有自定义编码器,所以对这些对象调用 json_encode 时会使用属性名。如果需要原始的传输键名,请添加 JsonSerializable 或 toArray 方法。