Как игнорировать свойство null с помощью JsonSerializable :: jsonSerialize ()?

Предположим, у нас есть простой объект для сериализации с вложенным объектом:

class User implements \JsonSerializable { private $name; private $email; private $address; public function jsonSerialize() { return [ 'name' => $this->name, 'email' => $this->email, 'address' => $this->address ]; } } 

Вложенный объект:

 class Address implements \JsonSerializable { private $city; private $state; public function jsonSerialize() { return [ 'city' => $this->city, 'state' => $this->state ]; } } 

Мы используем json_encode() для сериализации, это будет использовать изначально JsonSerializable :: jsonSerialize () :

 $json = json_encode($user); 

Если $name и $state имеют значение null, как это сделать:

 { "email": "john.doe@test.com", { "city": "Paris" } } 

вместо этого:

 { "name": null, "email": "john.doe@test.com", { "city": "Paris", "state": null } }