1. Go to this page and download the library: Download wikimedia/json-codec 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/ */
wikimedia / json-codec example snippets
use Wikimedia\JsonCodec\JsonCodecable;
class SampleObject implements JsonCodecable {
use JsonCodecableTrait;
/** @var string */
public string $property;
// ....
// Implement JsonCodecable using the JsonCodecableTrait
/** @inheritDoc */
public function toJsonArray(): array {
return [
'property' => $this->property,
];
}
/** @inheritDoc */
public static function newFromJsonArray( array $json ): SampleObject {
return new SampleObject( $json['property'] );
}
}
use Wikimedia\JsonCodec\JsonCodecable;
class ManagedObject implements JsonCodecable {
public static function jsonClassCodec( ContainerInterface $serviceContainer ) {
$factory = $serviceContainer->get( 'MyObjectFactory' );
return new class( $factory ) implements JsonClassCodec {
// ...
public function toJsonArray( $obj ): array {
// ...
}
public function newFromJsonArray( string $className, array $json ): ManagedObject {
return $this->factory->create( $json[....] );
}
};
}
}
use Wikimedia\JsonCodec\JsonCodec;
$services = ... your global services object, or null ...;
$codec = new JsonCodec( $services );
$string_result = $codec->toJsonString( $someComplexValue );
$someComplexValue = $codec->newFromJsonString( $string_result );
use Wikimedia\JsonCodec\JsonCodec;
$codec = new JsonCodec( ...optional services object... );
$codec->addCodecFor( \DocumentFragment::class, new MyDOMSerializer() );
$string_result = $codec->toJsonString( $someComplexValue );
class MyCustomJsonCodec extends JsonCodec {
protected function codecFor( string $className ): ?JsonClassCodec {
$codec = parent::codecFor( $className );
if ($codec === null && is_a($className, MyOwnSerializationType::class, true)) {
$codec = new MyCustomSerializer();
// Cache this for future use
$this->addCodecFor( $className, $codec );
}
return $codec;
}
}
class SampleContainerObject implements JsonCodecable {
use JsonCodecableTrait;
/** @var mixed */
public $contents;
/** @var list<Foo> */
public array $foos;
// ...
// Implement JsonCodecable using the JsonCodecableTrait
/** @inheritDoc */
public function toJsonArray(): array {
return [ 'contents' => $this->contents, 'foos' => $this->foos ];
}
/** @inheritDoc */
public static function newFromJsonArray( array $json ): SampleContainerObject {
return new SampleContainerObject( $json['contents'], $json['foos'] );
}
/** @inheritDoc */
public static function jsonClassHintFor( string $keyName ) {
if ( $keyName === 'contents' ) {
// Hint that the contained value is a SampleObject. It might be!
return SampleObject::class;
} elseif ( $keyName === 'foos' ) {
// A hint with a modifier
return Hint::build( Foo::class, Hint::LIST );
}
return null;
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.