php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如u975au4ed4。人阅读比较困难。现在这个方法在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":"u674eu900du9065","gender":"u7537"},{"name":"u8d75u7075u513f","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 = " "; 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": "女"}] }