PHP code example of hamlet-framework / json-mapper
1. Go to this page and download the library: Download hamlet-framework/json-mapper library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
hamlet-framework / json-mapper example snippets
class User
{
/** @var string */
private $name;
/** @var string|null */
private $email;
/** @var Address|null */
private $address;
}
class Address
{
/** @var string */
private $city;
}
$users = JsonMapper::map(
_list(_class(User::class)),
json_decode($data)
);
$configuration
->withDefaultValue(User::class, 'name', 'unknown')
->withJsonName(User::class, 'homeAddress', 'home_address', 'homeaddress')
->ignoreUnknown(User::class);
$configuaration
->withPropertySetters(User::class)
->withPropertySetter(User::class, 'homeAddress', 'updateHomeAddress');
class User
{
/** @var DateTimeImmutable */
private $time;
/** @var array<string,string> */
private $preferences;
/** @var string|null */
private $email;
}
$json = '
{ "time": 1593479541, "preferences": "{\"timeZone\":\"Russia/Moscow\"}", "email": "_.oO000_" }
';
$configuration
->withConverter(User::class, 'time', function (int $unixtime) {
return DateTimeImmutable::createFomFormat('U', (string) $unixtime);
})
->withConverter(User::class, 'preferences', function (string $json) {
return _map(_string(), _string())->cast(json_decode($json));
})
->withConverter(self::class, 'email', function ($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL) ?: null;
});
$user = JsonMapper::map(_class(User::class), json_decode($json), $configuration);
$user->preferences['timeZone'] == 'Russia/Moscow';
$user->time instanceof DateTimeImmutable;
$user->email === null;
$configuration
->withTypeDispatcher(User::class, function ($properties) {
if (isset($properties['name'])) {
return NamedUser::class;
} else {
return AnonymousUser::class;
}
});
$coniguration
->withTypeDispatcher(User::class, '__resolveType');
class Car implements JsonMapperAware
{
/** @var string */
protected $make;
public function make(): string
{
return $this->make;
}
public static function configureJsonMapper(JsonMapperConfiguration $configuration): JsonMapperConfiguration
{
return $configuration
->withTypeResolver(self::class, function ($properties) {
if (array_key_exists('machineGunCapacity', (array) $properties)) {
return JamesBondCar::class;
} else {
return Car::class;
}
});
}
}
$cars = JsonMapper::map(_list(_class(Car::class)), json_decode($payload));