php JSON数据格式化输出方法

php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4。人阅读比较困难。现在这个方法在json_encode的基础上再进行一次美化处理。使人能方便阅读内容。

 

1. 使用 json_encode 输出

 1 <?php
 2 
 3 header('content-type:application/json;charset=utf8');
 4 
 5 $arr = array(
 6     'status' => true,
 7     'errMsg' => '',
 8     'member' =>array(
 9         array(
10             'name' => '李逍遥',
11             'gender' => '男'
12         ),
13         array(
14             'name' => '赵灵儿',
15             'gender' => '女'
16         )
17     )
18 );
19 
20 echo json_encode($arr);
21 
22 ?>

输出结果为:

{"status":true,"errMsg":"","member":[{"name":"\u674e\u900d\u9065","gender":"\u7537"},{"name":"\u8d75\u7075\u513f","gender":"\u5973"}]}

 

2. 使用 jsonFormat 输出

 1 <?php
 2 
 3 /** Json数据格式化
 4 * @param  Mixed  $data   数据
 5 * @param  String $indent 缩进字符,默认4个空格
 6 * @return JSON
 7 */
 8 function jsonFormat($data, $indent=null){
 9 
10     // 对数组中每个元素递归进行urlencode操作,保护中文字符
11     array_walk_recursive($data, 'jsonFormatProtect');
12 
13     // json encode
14     $data = json_encode($data);
15 
16     // 将urlencode的内容进行urldecode
17     $data = urldecode($data);
18 
19     // 缩进处理
20     $ret = '';
21     $pos = 0;
22     $length = strlen($data);
23     $indent = isset($indent)? $indent : '    ';
24     $newline = "\n";
25     $prevchar = '';
26     $outofquotes = true;
27 
28     for($i=0; $i<=$length; $i++){
29 
30         $char = substr($data, $i, 1);
31 
32         if($char=='"' && $prevchar!='\\'){
33             $outofquotes = !$outofquotes;
34         }elseif(($char=='}' || $char==']') && $outofquotes){
35             $ret .= $newline;
36             $pos --;
37             for($j=0; $j<$pos; $j++){
38                 $ret .= $indent;
39             }
40         }
41 
42         $ret .= $char;
43         
44         if(($char==',' || $char=='{' || $char=='[') && $outofquotes){
45             $ret .= $newline;
46             if($char=='{' || $char=='['){
47                 $pos ++;
48             }
49 
50             for($j=0; $j<$pos; $j++){
51                 $ret .= $indent;
52             }
53         }
54 
55         $prevchar = $char;
56     }
57 
58     return $ret;
59 }
60 
61 /** 将数组元素进行urlencode
62 * @param String $val
63 */
64 function jsonFormatProtect(&$val){
65     if($val!==true && $val!==false && $val!==null){
66         $val = urlencode($val);
67     }
68 }
69 
70 header('content-type:application/json;charset=utf8');
71 
72 $arr = array(
73     'status' => true,
74     'errMsg' => '',
75     'member' =>array(
76         array(
77             'name' => '李逍遥',
78             'gender' => '男'
79         ),
80         array(
81             'name' => '赵灵儿',
82             'gender' => '女'
83         )
84     )
85 );
86 
87 echo jsonFormat($arr);
88 
89 ?>

输出结果为:

{
    "status":true,
    "errMsg":"",
    "member":[
        {
            "name":"李逍遥",
            "gender":"男"
        },
        {
            "name":"赵灵儿",
            "gender":"女"
        }
    ]
}

 

3.php5.4 以后,json_encode增加了JSON_UNESCAPED_UNICODE , JSON_PRETTY_PRINT 等几个常量参数。使显示中文与格式化更方便。

 

 1 header('content-type:application/json;charset=utf8');  
 2   
 3 $arr = array(  
 4     'status' => true,  
 5     'errMsg' => '',  
 6     'member' =>array(  
 7         array(  
 8             'name' => '李逍遥',  
 9             'gender' => '男'  
10         ),  
11         array(  
12             'name' => '赵灵儿',  
13             'gender' => '女'  
14         )  
15     )  
16 );  
17   
18 echo json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);

输出结果为:

{
    "status": true,
    "errMsg": "",
    "member": [
        {
            "name": "李逍遥",
            "gender": "男"
        },
        {
            "name": "赵灵儿",
            "gender": "女"
        }
    ]
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值