php JSON数据格式化方法
后端笔记 2016-10-24 13:29:20

 1. 使用 json_encode 输出

PHP Code复制内容到剪贴板
  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. ?>    

 

输出:

JavaScript Code复制内容到剪贴板
  1. {"status":true,"errMsg":"","member":[{"name":"\u674e\u900d\u9065","gender":"\u7537"},{"name":"\u8d75\u7075\u513f","gender":"\u5973"}]}    

 

2. 使用 jsonFormat 输出

PHP Code复制内容到剪贴板
  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. ?>   

输出:

JavaScript Code复制内容到剪贴板
  1. {    
  2.     "status":true,    
  3.     "errMsg":"",    
  4.     "member":[    
  5.         {    
  6.             "name":"李逍遥",    
  7.             "gender":"男"    
  8.         },    
  9.         {    
  10.             "name":"赵灵儿",    
  11.             "gender":"女"    
  12.         }    
  13.     ]    
  14. }    

 

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

PHP Code复制内容到剪贴板
  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);    

输出:

JavaScript Code复制内容到剪贴板
  1. {    
  2.     "status"true,    
  3.     "errMsg""",    
  4.     "member": [    
  5.         {    
  6.             "name""李逍遥",    
  7.             "gender""男"    
  8.         },    
  9.         {    
  10.             "name""赵灵儿",    
  11.             "gender""女"    
  12.         }    
  13.     ]    
  14. }    

 

JSON常量参数说明:
以下常量表示了 json_last_error() 所返回的错误类型。

C/C++ Code复制内容到剪贴板
  1. JSON_ERROR_NONE (integer)    
  2. //没有错误发生。自 PHP 5.3.0 起生效。    
  3.     
  4. JSON_ERROR_DEPTH (integer)    
  5. //到达了最大堆栈深度。自 PHP 5.3.0 起生效。    
  6.     
  7. JSON_ERROR_STATE_MISMATCH (integer)    
  8. //出现了下溢(underflow)或者模式不匹配。自 PHP 5.3.0 起生效。    
  9.     
  10. JSON_ERROR_CTRL_CHAR (integer)    
  11. //控制字符错误,可能是编码不对。自 PHP 5.3.0 起生效。    
  12.     
  13. JSON_ERROR_SYNTAX (integer)    
  14. //语法错误。 自 PHP 5.3.0 起生效。    
  15.     
  16. JSON_ERROR_UTF8 (integer)    
  17. //异常的 UTF-8 字符,也许是因为不正确的编码。 此常量自 PHP 5.3.1 起生效。    

 

下面的常量可以和 json_encode() 的 form 选项结合使用。

C/C++ Code复制内容到剪贴板
  1. JSON_HEX_TAG (integer)    
  2. //所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。    
  3.     
  4. JSON_HEX_AMP (integer)    
  5. //所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。    
  6.     
  7. JSON_HEX_APOS (integer)    
  8. //所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。    
  9.     
  10. JSON_HEX_QUOT (integer)    
  11. //所有的 " 转换成 \u0022。 自 PHP 5.3.0 起生效。    
  12.     
  13. JSON_FORCE_OBJECT (integer)    
  14. //使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。    
  15.     
  16. JSON_NUMERIC_CHECK (integer)    
  17. //将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。    
  18.     
  19. JSON_BIGINT_AS_STRING (integer)    
  20. //将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。    
  21.     
  22. JSON_PRETTY_PRINT (integer)    
  23. //用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。    
  24.     
  25. JSON_UNESCAPED_SLASHES (integer)    
  26. //不要编码 /。 自 PHP 5.4.0 起生效。    
  27.     
  28. JSON_UNESCAPED_UNICODE (integer)    

 

 

 

 

本文来自于:http://www.yoyo88.cn/note/backend/44.html

上一篇 PHP常用函数
Powered by yoyo苏ICP备15045725号