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
       
   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值