Tool Kumar 工具

JSON 转 PHP 类

生成适用于 PHP 8.1 及更高版本的类,通过构造函数属性提升定义带类型的 readonly 属性。每个类都有一个 fromArray 方法,负责映射原始 JSON 键名并构建嵌套对象。

如何使用这个工具

  1. 粘贴一份有代表性的响应,其中应包含字段存在差异的记录。
  2. 检查生成的输出,必要时修改根名称。
  3. 复制或下载代码,然后对照你的 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 方法。

相关工具

JSON 转 Python 类、JSON 转 Java 实体类和JSON Schema 生成器。