php的JSON数据格式化方法2014-08-31php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如u975au4ed4。人阅读比较困难。现在这个方法在json_encode的基础上再进行一次美化处理。使人能方便阅读内容。1. 使用 json_encode 输出
<?phpheader("content-type:application/json;charset=utf8");$arr = array("status" => true,"errMsg" => "","member" =>array(array("name" => "李逍遥","gender" => "男"),array("name" => "赵灵儿","gender" => "女")));echo json_encode($arr);?>
输出:{"status":true,"errMsg":"","member":[{"name":"u674eu900du9065","gender":"u7537"},{"name":"u8d75u7075u513f","gender":"u5973"}]}可以看出,这种格式人阅读很困难。2. 使用 jsonFormat 输出
<?php/** Json数据格式化 * @paramMixed$data 数据 * @paramString $indent 缩进字符,默认4个空格 * @return JSON */function jsonFormat($data, $indent=null){// 对数组中每个元素递归进行urlencode操作,保护中文字符// array_walk_recursive($data, "jsonFormatProtect");// json encode$data = json_encode($data);// 将urlencode的内容进行urldecode$data = urldecode($data);// 缩进处理$ret = "";$pos = 0;$length = strlen($data);$indent = isset($indent)? $indent : "";$newline = "
";$prevchar = "";$outofquotes = true;for($i=0; $i<=$length; $i++){$char = substr($data, $i, 1);if($char==""" && $prevchar!="\"){$outofquotes = !$outofquotes;}elseif(($char=="}" || $char=="]") && $outofquotes){$ret .= $newline;$pos --;for($j=0; $j<$pos; $j++){$ret .= $indent;}}$ret .= $char;if(($char=="," || $char=="{" || $char=="[") && $outofquotes){$ret .= $newline;if($char=="{" || $char=="["){$pos ++;}for($j=0; $j<$pos; $j++){$ret .= $indent;}}$prevchar = $char;}return $ret;}/** 将数组元素进行urlencode * @param String $val */function jsonFormatProtect(&$val){if($val!==true && $val!==false && $val!==null){$val = urlencode($val);}}header("content-type:application/json;charset=utf8");$arr = array("status" => true,"errMsg" => "","member" =>array(array("name" => "李逍遥","gender" => "男"),array("name" => "赵灵儿","gender" => "女")));echo jsonFormat($arr);?>输出:
{"status":true,"errMsg":"","member":[{"name":"李逍遥","gender":"男"},{"name":"赵灵儿","gender":"女"}]}