forked from codeigniter4/CodeIgniter4
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsonCast.php
More file actions
61 lines (51 loc) · 1.57 KB
/
JsonCast.php
File metadata and controls
61 lines (51 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
declare(strict_types=1);
/**
* This file is part of CodeIgniter 4 framework.
*
* (c) CodeIgniter Foundation <[email protected]>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace CodeIgniter\Entity\Cast;
use CodeIgniter\Entity\Exceptions\CastException;
use JsonException;
use stdClass;
class JsonCast extends BaseCast
{
public static function get($value, array $params = [])
{
$associative = in_array('array', $params, true);
$tmp = $value !== null ? ($associative ? [] : new stdClass()) : null;
if (function_exists('json_decode')
&& (
(is_string($value)
&& strlen($value) > 1
&& in_array($value[0], ['[', '{', '"'], true))
|| is_numeric($value)
)
) {
try {
$tmp = json_decode($value, $associative, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw CastException::forInvalidJsonFormat($e->getCode());
}
}
return $tmp;
}
/**
* {@inheritDoc}
*/
public static function set($value, array $params = []): string
{
if (function_exists('json_encode')) {
try {
$value = json_encode($value, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw CastException::forInvalidJsonFormat($e->getCode());
}
}
return $value;
}
}