PHP兼容低版本和高版本的json数据处理类
PHP兼容低版本和高版本的json数据处理类
json数据格式是当下比较流行的一种, 比起xml来,json格式更易用简单. 同时,与javascript配合起来可以说是最佳的数据交换格式. 在php 5.2以上版本,已经支持json的解析了,但是在php 5.2一下就不被支持了. 下面这个类可以实现兼容json_encode函数, 在高版本上,使用自带函数解析,低版本使用自定义函数解析,相信这种功能对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
87
88
89
90
91
92
93
94
95
|
/* * 作者: 雪狐博客 */ final class Json { static public function encode($data) { if (function_exists('json_encode')) { return json_encode($data); } else { switch (gettype($data)) { case 'boolean': return $data ? 'true' : 'false'; case 'integer': case 'double': return $data; case 'resource': case 'string': return '"' . str_replace(array("\r", "\n", "<", ">", "&"), array('\r', '\n', '\x3c', '\x3e', '\x26'), addslashes($data)) . '"'; case 'array': if (empty($data) || array_keys($data) === range(0, sizeof($data) - 1)) { $output = array(); foreach ($data as $value) { $output[] = Json::encode($value); } return '[ ' . implode(', ', $output) . ' ]'; } case 'object': $output = array(); foreach ($data as $key => $value) { $output[] = Json::encode(strval($key)) . ': ' . Json::encode($value); } return '{ ' . implode(', ', $output) . ' }'; default: return 'null'; } } } static public function decode($json, $assoc = FALSE) { if (function_exists('json_decode')) { return json_decode($json); } else { $match = '/".*?(?<!\\\\)"/'; $string = preg_replace($match, '', $json); $string = preg_replace('/[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/', '', $string); if ($string != '') { return NULL; } $s2m = array(); $m2s = array(); preg_match_all($match, $json, $m); foreach ($m[0] as $s) { $hash = '"' . md5($s) . '"'; $s2m[$s] = $hash; $m2s[$hash] = str_replace('$', '\$', $s); } $json = strtr($json, $s2m); $a = ($assoc) ? '' : '(object) '; $data = array( ':' => '=>', '[' => 'array(', '{' => "{$a}array(", ']' => ')', '}' => ')' ); $json = strtr($json, $data); $json = preg_replace('~([\s\(,>])(-?)0~', '$1$2', $json); $json = strtr($json, $m2s); $function = @create_function('', "return {$json};"); $return = ($function) ? $function() : NULL; unset($s2m); unset($m2s); unset($function); return $return; } } } |
虽功未成,亦未敢藏私,众侠诸神通尽录于此,竟成一笈,名葵花宝典,以飨后世。
邮箱:steven9801@163.com
QQ: 48039387
邮箱:steven9801@163.com
QQ: 48039387
浙公网安备 33010602011771号