Objetos codificados por JSON: JsonSerializable

PHP 5.4 introduz algumas grandes melhorias em sua extensão JSON. Um deles é a interface JsonSerializable.

JsonSerializable

Os objetos que implementam essa interface devem fornecer um método chamado jsonSerialize. Este método deve retornar quaisquer dados do objeto que devem ser transformados em JSON quando json_encodeé chamado com este objeto como parâmetro.

<?php

class TreeNode implements JsonSerializable
{
private $value;

private $children = array();

public function __construct($value)
{
$this
->value = $value;
}

// accessor methods for $this->children omitted

public function jsonSerialize()
{
return ['value' => $this->value,
'children' => $this->children];
}
}

$t
= new TreeNode(1);
$t
->addChild(new TreeNode(2));

echo json_encode
($t);

// output:
// {"value":1,"children":[{"value":2,"children":[]}]}

JSON_PRETTY_PRINT

Ler JSON (ou melhor: analisar JSON em sua cabeça) é muito doloroso se não estiver formatado corretamente. Com a nova opção JSON_PRETTY_PRINT, o PHP é capaz de produzir JSON (quase) legível por humanos:

echo json_encode($t, JSON_PRETTY_PRINT);

// output:
// {
// "value": 1,
// "children": [
// {
// "value": 2,
// "children": [
//
// ]
// }
// ]
// }

Leitura Adicional