{"id":15296188,"url":"https://github.com/dangdungcntt/object-mapper","last_synced_at":"2026-01-04T23:51:17.954Z","repository":{"id":57024389,"uuid":"318050989","full_name":"dangdungcntt/object-mapper","owner":"dangdungcntt","description":"An ObjectMapper for PHP (inspired by ObjectMapper in java)","archived":false,"fork":false,"pushed_at":"2021-10-18T03:18:42.000Z","size":121,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-30T05:26:30.746Z","etag":null,"topics":["object-mapper","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dangdungcntt.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null}},"created_at":"2020-12-03T02:26:14.000Z","updated_at":"2024-05-09T13:13:26.000Z","dependencies_parsed_at":"2022-08-23T13:50:34.398Z","dependency_job_id":null,"html_url":"https://github.com/dangdungcntt/object-mapper","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":"spatie/package-skeleton-laravel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dangdungcntt%2Fobject-mapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dangdungcntt%2Fobject-mapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dangdungcntt%2Fobject-mapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dangdungcntt%2Fobject-mapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dangdungcntt","download_url":"https://codeload.github.com/dangdungcntt/object-mapper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245407755,"owners_count":20610232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["object-mapper","php"],"created_at":"2024-09-30T18:09:41.594Z","updated_at":"2026-01-04T23:51:17.927Z","avatar_url":"https://github.com/dangdungcntt.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Object mapper\n\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/nddcoder/object-mapper.svg?style=flat-square)](https://packagist.org/packages/nddcoder/object-mapper)\n[![GitHub Tests Action Status](https://img.shields.io/github/workflow/status/dangdungcntt/object-mapper/run-tests?label=tests)](https://github.com/nddcoder/object-mapper/actions?query=workflow%3Arun-tests+branch%3Amaster)\n[![Total Downloads](https://img.shields.io/packagist/dt/nddcoder/object-mapper.svg?style=flat-square)](https://packagist.org/packages/nddcoder/object-mapper)\n\nAn `ObjectMapper` for PHP (inspired by ObjectMapper in java)\n\n## Installation\n\nYou can install the package via composer:\n\n```bash\ncomposer require nddcoder/object-mapper\n```\n\n## Usage\n\n``` php\n\nuse Nddcoder\\ObjectMapper\\ObjectMapper;\n\nclass User {\n    public string $name;\n    public string $email;\n}\n\n$objectMapper = new ObjectMapper();\n\n//Make object from json string\n$jsonString = '{\"name\":\"Dung Nguyen Dang\",\"email\":\"dangdungcntt@gmail.com\"}';\n$user = $objectMapper-\u003ereadValue($jsonString, User::class);\necho $user-\u003ename; //Dung Nguyen Dang\necho $user-\u003eemail; //dangdungcntt@gmail.com\n\n//You can pass an associative array to readValue function instead of string\n$user = $objectMapper-\u003ereadValue(['name' =\u003e 'Dung Nguyen Dang', 'email' =\u003e 'dangdungcntt@gmail.com'], User::class);\n\n//Convert object to json string\n$userJsonString = $objectMapper-\u003ewriteValueAsString($user);\necho $userJsonString; //{\"name\":\"Dung Nguyen Dang\",\"email\":\"dangdungcntt@gmail.com\"}\n```\n\n#### Array Property\n\nUse `ArrayProperty` Attribute to specific type of array item\n\n``` php\n\nuse Nddcoder\\ObjectMapper\\ObjectMapper;\nuse Nddcoder\\ObjectMapper\\Attributes\\ArrayProperty;\n\nclass Comment {\n    public string $from;\n    public string $content;\n}\n\nclass Post {\n    public string $title;\n    \n    #[ArrayProperty(Comment::class)]\n    public array $comments;\n}\n\n$objectMapper = new ObjectMapper();\n\n//Make object from json string\n$jsonString = '{\"title\":\"New Blog Post\",\"comments\":[{\"from\":\"nddcoder\",\"content\":\"Hello\"}]}';\n$post = $objectMapper-\u003ereadValue($jsonString, Post::class);\necho $post-\u003etitle; //New Blog Post\nprint_r($post-\u003ecomments);\n/*\nArray\n(\n    [0] =\u003e Comment Object\n        (\n            [from] =\u003e nddcoder\n            [content] =\u003e Hello\n        )\n\n)\n*/\n```\n\n#### Custom JSON property\n\nYou can use `JsonProperty('\u003cpropertyName\u003e')` to custom name for a property\n``` php\n\nuse Nddcoder\\ObjectMapper\\ObjectMapper;\nuse Nddcoder\\ObjectMapper\\Attributes\\JsonProperty;\n\nclass Post {\n    public string $title;\n    \n    #[JsonProperty('body')]\n    public string $content;\n}\n\n$objectMapper = new ObjectMapper();\n\n//Make object from json string\n$jsonString = '{\"title\":\"New Blog Post\",\"body\":\"Blog body here\"}';\n$post = $objectMapper-\u003ereadValue($jsonString, Post::class);\necho $post-\u003etitle; //New Blog Post\necho $post-\u003econtent; //Blog body here\n\n//Convert object to json string\n$postJsonString = $objectMapper-\u003ewriteValueAsString($post);\necho $postJsonString; //{\"title\":\"New Blog Post\",\"body\":\"Blog body here\"}\n```\n\n#### Custom behavior via getter/setter\n\nYou can define getter/setter to custom behavior when get/set a property\n``` php\n\nuse Nddcoder\\ObjectMapper\\ObjectMapper;\nuse Nddcoder\\ObjectMapper\\Attributes\\JsonProperty;\n\nclass User {\n    public string $username;\n    protected string $password;\n    \n    public function setUsername(string $username): void\n    {\n        $this-\u003eusername = strtolower($username);\n    }\n    \n    public function getPassword(): ?string\n    {\n        return null;\n    }\n    \n    public function setPassword(string $password): void\n    {\n        $this-\u003epassword = md5($password);\n    }\n}\n\n$objectMapper = new ObjectMapper();\n\n//Make object from json string\n$jsonString = '{\"username\":\"NDDCoder\",\"password\":\"secret\"}';\n$user = $objectMapper-\u003ereadValue($jsonString, User::class);\nprint_r($user);\n/*\nUser Object\n(\n    [username] =\u003e nddcoder\n    [password:protected] =\u003e 5ebe2294ecd0e0f08eab7690d2a6ee69\n)\n*/\n\n\n//Convert object to json string\n$userJsonString = $objectMapper-\u003ewriteValueAsString($user);\necho $userJsonString; //{\"username\":\"nddcoder\",\"password\":null}\n```\n\n#### Encoders\n\nBy default, package included 2 encoders for `DateTimeInterface` and `stdClass`\n\nYou can create your custom encoder by implements `ObjectMapperEncoder` interface\n\n```php\nuse MongoDB\\BSON\\ObjectId;\nuse Nddcoder\\ObjectMapper\\Contracts\\ObjectMapperEncoder;\n\nclass ObjectIdEncoder implements ObjectMapperEncoder\n{\n    public function encode(mixed $value, ?string $className = null): string\n    {\n        return (string) $value;\n    }\n\n    public function decode(mixed $value, ?string $className = null): mixed\n    {\n        return new ObjectId($value);\n    }\n}\n```\n\nand then using `ObjectMapper::addGlobalEncoder` to add it as global or `addEncoder` to add it to current instance only\n\n```php\nObjectMapper::addGlobalEncoder(ObjectId::class, ObjectIdEncoder::class);\n$objectMapper-\u003eaddEncoder(ObjectId::class, ObjectIdEncoder::class);\n```\n\nYou can remove global encoder using `ObjectMapper::removeGlobalEncoder` or `removeEncoder` to remove encoder from current instance only \n\n```php\nObjectMapper::removeGlobalEncoder(ObjectId::class);\n$objectMapper-\u003eremoveEncoder(ObjectId::class);\n```\n\n## Testing\n\n``` bash\ncomposer test\n```\n\n## Changelog\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.\n\n## Contributing\n\nPlease see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.\n\n## Security Vulnerabilities\n\nPlease review [our security policy](../../security/policy) on how to report security vulnerabilities.\n\n## Credits\n\n- [Dung Nguyen Dang](https://github.com/dangdungcntt)\n- [All Contributors](../../contributors)\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdangdungcntt%2Fobject-mapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdangdungcntt%2Fobject-mapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdangdungcntt%2Fobject-mapper/lists"}