getJsonTypeDeclarationSQL($fieldDeclaration); } public function convertToDatabaseValue($value, AbstractPlatform $platform) { if ($value === null) { return null; } $flags = JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES; if (defined('JSON_PRESERVE_ZERO_FRACTION')) { $flags |= JSON_PRESERVE_ZERO_FRACTION; // phpcs:ignore } $encoded = json_encode($value, $flags); $this->handleErrors(); return $encoded; } public function convertToPHPValue($value, AbstractPlatform $platform) { if ($value === null || $value === '') { return null; } if (is_resource($value)) { $value = stream_get_contents($value); } $value = mb_convert_encoding((string)$value, 'UTF-8', 'UTF-8'); // sanitize invalid utf8 $decoded = json_decode($value, true); $this->handleErrors(); return $decoded; } public function getName() { return self::NAME; } public function requiresSQLCommentHint(AbstractPlatform $platform) { return !$platform->hasNativeJsonType(); } private function handleErrors() { $error = json_last_error(); if ($error !== JSON_ERROR_NONE) { throw new \RuntimeException('Error when parsing JSON database value: "' . json_last_error_msg() . '"', $error); } } }