forked from osTicket/osTicket
-
Notifications
You must be signed in to change notification settings - Fork 0
/
class.json.php
86 lines (72 loc) · 2.69 KB
/
class.json.php
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
/*********************************************************************
class.json.php
Parses JSON text data to PHP associative array. Useful mainly for API
JSON requests. The module will attempt to use the json_* functions
builtin to PHP5.2+ if they exist and will fall back to a pure-php
implementation included in JSON.php.
Jared Hancock
Copyright (c) 2006-2010 osTicket
http://www.osticket.com
Released under the GNU General Public License WITHOUT ANY WARRANTY.
See LICENSE.TXT for details.
vim: expandtab sw=4 ts=4 sts=4:
$Id: $
**********************************************************************/
include_once "JSON.php";
class JsonDataParser {
function parse($stream, $tidy=false) {
if (is_resource($stream)) {
$contents = '';
while (!feof($stream))
$contents .= fread($stream, 8192);
} else
$contents = $stream;
if ($contents && $tidy)
$contents = self::tidy($contents);
return self::decode($contents);
}
static function decode($contents, $assoc=true) {
if (function_exists("json_decode"))
return json_decode($contents, $assoc);
$decoder = new Services_JSON($assoc ? SERVICES_JSON_LOOSE_TYPE : 0);
return $decoder->decode($contents);
}
static function tidy($content) {
// Clean up doubly quoted JSON
$content = str_replace(
array(':"{', '}"', '\"'),
array(':{', '}', '"'),
$content);
// return trimmed content.
return trim($content);
}
function lastError() {
if (function_exists("json_last_error")) {
$errors = array(
JSON_ERROR_NONE => __('No errors'),
JSON_ERROR_DEPTH => __('Maximum stack depth exceeded'),
JSON_ERROR_STATE_MISMATCH => __('Underflow or the modes mismatch'),
JSON_ERROR_CTRL_CHAR => __('Unexpected control character found'),
JSON_ERROR_SYNTAX => __('Syntax error, malformed JSON'),
JSON_ERROR_UTF8 => __('Malformed UTF-8 characters, possibly incorrectly encoded')
);
if ($message = $errors[json_last_error()])
return $message;
return __("Unknown error");
} else {
# Doesn't look like Servies_JSON supports errors for decode()
return __("Unknown JSON parsing error");
}
}
}
class JsonDataEncoder {
function encode($var) {
if (function_exists('json_encode'))
return json_encode($var);
else {
$decoder = new Services_JSON();
return $decoder->encode($var);
}
}
}