(bool) enable/disable the removing of * null values (default is true) * * @param mixed $data */ public static function serialize($data, array $options = []): string { if (empty($data)) { return '{}'; } if (is_string($data)) { return $data; } try { $removeNull = $options['remove_null'] ?? true; if ($removeNull) { Utility::removeNullValue($data); } return json_encode($data, JSON_PRESERVE_ZERO_FRACTION + JSON_INVALID_UTF8_SUBSTITUTE + JSON_THROW_ON_ERROR); } catch (JsonException $e) { throw new InvalidJsonException(sprintf( "I cannot serialize to Json: %s", $e->getMessage() )); } } /** * The available options are: * 'type' => (string) specify if the output should be an array * or an object (default is array) * * @inheritdoc */ public static function unserialize(string $data, array $options = []) { try { $type = $options['type'] ?? 'array'; if (!in_array($type, ['object', 'array'])) { throw new UndefinedPropertyException("The unserialize 'type' option must be object or array"); } return json_decode($data, $type === 'array', 512, JSON_THROW_ON_ERROR); } catch (JsonException $e) { throw new InvalidJsonException(sprintf( "Not a valid Json: %s", $e->getMessage() )); } } }