json-mapper/json-mapper

将 JSON 结构映射到 PHP 类

2.22.2 2024-05-14 09:24 UTC

README

JsonMapper 是一个 PHP 库,允许您将 JSON 响应映射到使用 doc 块注释或使用类型属性注解的 PHP 对象。更多信息请见项目网站:https://jsonmapper.net/

GitHub Packagist Version Packagist Downloads PHP from Packagist GitHub Actions Workflow Status Coverage Status

为什么使用 JsonMapper

不断将 JSON 响应映射到您的对象会变得繁琐且容易出错。更不用说还需要为这种映射编写测试。

JsonMapper 是基于最常见的用法构建的。为了允许那些默认不支持的情况,它可以通过使用中间件轻松扩展,因为其核心就是使用中间件设计的。

JsonMapper 支持以下功能

  • 大小写转换
  • 调试
  • docBlock 注释
  • 最终回调
  • 命名空间解析
  • PHP 7.4 类型属性

安装 JsonMapper

可以使用 Composer 容易地安装 JsonMapper

$ composer require json-mapper/json-mapper

上面的示例假设您的 $PATH 上有 composer

如何使用 JsonMapper

给定以下类定义

namespace JsonMapper\Tests\Implementation;

class SimpleObject
{
    /** @var string */
    private $name;

    public function getName(): string
    {
        return $this->name;
    }

    public function setName(string $name): void
    {
        $this->name = $name;
    }
}

结合以下 JsonMapper 代码作为您应用程序的一部分

$mapper = (new \JsonMapper\JsonMapperFactory())->default();
$object = new \JsonMapper\Tests\Implementation\SimpleObject();

$mapper->mapObject(json_decode('{ "name": "John Doe" }'), $object);

var_dump($object);

上面的示例将输出

class JsonMapper\Tests\Implementation\SimpleObject#1 (1) {
  private $name =>
  string(8) "John Doe"
}

自定义 JsonMapper

使用 AbstractMiddleware 来编写自己的中间件,这使得扩展您项目所需的功能变得尽可能简单。

use JsonMapper;

$mapper = (new JsonMapper\JsonMapperFactory())->bestFit();
$mapper->push(new class extends JsonMapper\Middleware\AbstractMiddleware {
    public function handle(
        \stdClass $json,
        JsonMapper\Wrapper\ObjectWrapper $object,
        JsonMapper\ValueObjects\PropertyMap $map,
        JsonMapper\JsonMapperInterface $mapper
    ): void {
        /* Custom logic here */
    }
});

贡献

有关如何为 JsonMapper 做贡献的信息,请参阅 CONTRIBUTING.md

贡献者名单

感谢所有为 JsonMapper 做出贡献的人!您可以在 GitHub 上找到 JsonMapper 贡献者的详细列表。

赞助

JetBrains

此项目由 JetBrains 赞助,提供开源许可证,以继续免费构建 JsonMapper。

许可

MIT 许可证 (MIT)。更多信息请参阅 许可文件