Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
CRAP | |
100.00% |
26 / 26 |
Json | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
8 | |
100.00% |
26 / 26 |
encode | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
encodeFile | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
decode | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
decodeFile | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
isJson | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
check_json_error | |
100.00% |
1 / 1 |
2 | |
100.00% |
13 / 13 |
<?php declare(strict_types=1); | |
/** | |
* Ion | |
* | |
* Building blocks for web development | |
* | |
* PHP version 7.2 | |
* | |
* @package Ion | |
* @author Timothy J. Warren <tim@timshomepage.net> | |
* @copyright 2015 - 2019 Timothy J. Warren | |
* @license http://www.opensource.org/licenses/mit-license.html MIT License | |
* @version 3.0.0 | |
* @link https://git.timshomepage.net/aviat/ion | |
*/ | |
namespace Aviat\Ion; | |
use Aviat\Ion\Type\StringType; | |
/** | |
* Helper class for json convenience methods | |
*/ | |
class Json { | |
/** | |
* Encode data in json format | |
* | |
* @param mixed $data | |
* @param int $options | |
* @param int $depth | |
* @throws JsonException | |
* @return string | |
*/ | |
public static function encode($data, $options = 0, $depth = 512): string | |
{ | |
$json = json_encode($data, $options, $depth); | |
self::check_json_error(); | |
return $json; | |
} | |
/** | |
* Encode data in json format and save to a file | |
* | |
* @param string $filename | |
* @param mixed $data | |
* @param int $jsonOptions - Options to pass to json_encode | |
* @param int $fileOptions - Options to pass to file_get_contents | |
* @throws JsonException | |
* @return int | |
*/ | |
public static function encodeFile(string $filename, $data, int $jsonOptions = 0, int $fileOptions = 0): int | |
{ | |
$json = self::encode($data, $jsonOptions); | |
return file_put_contents($filename, $json, $fileOptions); | |
} | |
/** | |
* Decode data from json | |
* | |
* @param string|null $json | |
* @param bool $assoc | |
* @param int $depth | |
* @param int $options | |
* @throws JsonException | |
* @return mixed | |
*/ | |
public static function decode($json, bool $assoc = TRUE, int $depth = 512, int $options = 0) | |
{ | |
// Don't try to decode null | |
if ($json === NULL) | |
{ | |
return NULL; | |
} | |
$data = json_decode($json, $assoc, $depth, $options); | |
self::check_json_error(); | |
return $data; | |
} | |
/** | |
* Decode json data loaded from the passed filename | |
* | |
* @param string $filename | |
* @param bool $assoc | |
* @param int $depth | |
* @param int $options | |
* @throws JsonException | |
* @return mixed | |
*/ | |
public static function decodeFile(string $filename, bool $assoc = TRUE, int $depth = 512, int $options = 0) | |
{ | |
$json = file_get_contents($filename); | |
return self::decode($json, $assoc, $depth, $options); | |
} | |
/** | |
* Determines whether a string is valid json | |
* | |
* @param string $string | |
* @throws \InvalidArgumentException | |
* @return boolean | |
*/ | |
public static function isJson(string $string): bool | |
{ | |
return StringType::create($string)->isJson(); | |
} | |
/** | |
* Call the json error functions to check for errors encoding/decoding | |
* | |
* @throws JsonException | |
* @return void | |
*/ | |
protected static function check_json_error(): void | |
{ | |
$constant_map = [ | |
JSON_ERROR_NONE => 'JSON_ERROR_NONE', | |
JSON_ERROR_DEPTH => 'JSON_ERROR_DEPTH', | |
JSON_ERROR_STATE_MISMATCH => 'JSON_ERROR_STATE_MISMATCH', | |
JSON_ERROR_CTRL_CHAR => 'JSON_ERROR_CTRL_CHAR', | |
JSON_ERROR_SYNTAX => 'JSON_ERROR_SYNTAX', | |
JSON_ERROR_UTF8 => 'JSON_ERROR_UTF8', | |
JSON_ERROR_RECURSION => 'JSON_ERROR_RECURSION', | |
JSON_ERROR_INF_OR_NAN => 'JSON_ERROR_INF_OR_NAN', | |
JSON_ERROR_UNSUPPORTED_TYPE => 'JSON_ERROR_UNSUPPORTED_TYPE' | |
]; | |
$error = json_last_error(); | |
$message = json_last_error_msg(); | |
if (JSON_ERROR_NONE !== $error) | |
{ | |
throw new JsonException("{$constant_map[$error]} - {$message}", $error); | |
} | |
} | |
} | |
// End of JSON.php |