1: <?php
2: namespace Worldline\Connect\Sdk\JSON;
3:
4: use stdClass;
5: use UnexpectedValueException;
6:
7: /**
8: * Class JSONUtil
9: *
10: * @package Worldline\Connect\Sdk
11: */
12: class JSONUtil
13: {
14: private function __construct()
15: {
16: }
17:
18: /**
19: * @param string $value
20: * @return stdClass
21: * @throws UnexpectedValueException
22: */
23: public static function decode($value)
24: {
25: $object = json_decode($value);
26: if (json_last_error()) {
27: throw new UnexpectedValueException('Invalid JSON value: ' . self::getLastJsonDecodeErrorString());
28: }
29: return $object;
30: }
31:
32: /**
33: * @return string
34: */
35: public static function getLastJsonDecodeErrorString()
36: {
37: if (function_exists('json_last_error_msg')) {
38: return json_last_error_msg();
39: }
40: switch (json_last_error()) {
41: case JSON_ERROR_NONE:
42: return 'No errors';
43: case JSON_ERROR_DEPTH:
44: return 'Maximum stack depth exceeded';
45: case JSON_ERROR_STATE_MISMATCH:
46: return 'Underflow or the modes mismatch';
47: case JSON_ERROR_CTRL_CHAR:
48: return 'Unexpected control character found';
49: case JSON_ERROR_SYNTAX:
50: return 'Syntax error. Malformed JSON';
51: case JSON_ERROR_UTF8:
52: return 'Malformed UTF-8 characters. Incorrect encoding';
53: default:
54: return 'Unknown error';
55: }
56: }
57: }
58: