A good example on when you would use functionality like this is when working with objects.
json_encode() will take a DateTime and convert it to:
{
"date":"2013-01-31 11:14:05",
"timezone_type":3,
"timezone":"America\/Los_Angeles"
}
This is great when working with PHP, but if the Date is being read by Java. The Java date parser doesn't know what to do with that. But it does know what to do with the ISO8601 format...
<?php
date_default_timezone_set('America/Los_Angeles');
class Fruit implements JsonSerializable {
public
$type = 'Apple',
$lastEaten = null;
public function __construct() {
$this->lastEaten = new DateTime();
}
public function jsonSerialize() {
return [
'type' => $this->type,
'lastEaten' => $this->lastEaten->format(DateTime::ISO8601)
];
}
}
echo json_encode(new Fruit()); //which outputs: {"type":"Apple","lastEaten":"2013-01-31T11:17:07-0500"}
?>
JsonSerializable::jsonSerialize
(PHP 5 >= 5.4.0)
JsonSerializable::jsonSerialize — Especifica los datos que deberían serializarse para JSON
Descripción
Serializa el objeto a un valor que puede ser serializado de forma nativa por json_encode().
Parámetros
Esta función no tiene parámetros.
Valores devueltos
Devuelve los datos que pueden ser serializados por json_encode(), los cuales son un valor de cualquier tipo distinto de resource.
Ejemplos
Ejemplo #1 Ejemplo de JsonSerializable::jsonSerialize() devolviendo un array
<?php
class ArrayValue implements JsonSerializable {
public function __construct(array $array) {
$this->array = $array;
}
public function jsonSerialize() {
return $this->array;
}
}
$array = [1, 2, 3];
echo json_encode(new ArrayValue($array), JSON_PRETTY_PRINT);
?>
El resultado del ejemplo sería:
[
1,
2,
3
]
Ejemplo #2 Ejemplo de JsonSerializable::jsonSerialize() devolviendo un array asociativo
<?php
class ArrayValue implements JsonSerializable {
public function __construct(array $array) {
$this->array = $array;
}
public function jsonSerialize() {
return $this->array;
}
}
$array = ['foo' => 'bar', 'quux' => 'baz'];
echo json_encode(new ArrayValue($array), JSON_PRETTY_PRINT);
?>
El resultado del ejemplo sería:
{
"foo": "bar",
"quux": "baz"
}
Ejemplo #3 Ejemplo de JsonSerializable::jsonSerialize() devolviento un integer
<?php
class IntegerValue implements JsonSerializable {
public function __construct($number) {
$this->number = (integer) $number;
}
public function jsonSerialize() {
return $this->number;
}
}
echo json_encode(new IntegerValue(1), JSON_PRETTY_PRINT);
?>
El resultado del ejemplo sería:
1
Ejemplo #4 Ejemplo de JsonSerializable::jsonSerialize() devolviendo un string
<?php
class StringValue implements JsonSerializable {
public function __construct($string) {
$this->string = (string) $string;
}
public function jsonSerialize() {
return $this->string;
}
}
echo json_encode(new StringValue('¡Hola!'), JSON_PRETTY_PRINT);
?>
El resultado del ejemplo sería:
"¡Hola!"
