PHP JSON 封装

简介:
Java代码   收藏代码
  1. public function printJson($data, $jsonCallBack = '', $fromCode = "UTF-8")  
  2. {  
  3.     mb_convert_variables("UTF8", $fromCode, $data);  
  4.     //ajax通过设置Access-Control-Allow-Origin来实现跨域访问比较简单.指定允许其他域名访问  
  5.     header('Access-Control-Allow-Origin:*');  
  6.     header("Cache-Control: no-cache, no-store, must-revalidate, max-age=-1");  
  7.     header("Content-Type: application/json; charset=utf-8");  
  8.     $outPut = function_exists('json_encode') ? json_encode($data) : CJSON::encode($data);  
  9.     if ('' != $jsonCallBack) {  
  10.         $outPut = $jsonCallBack . '(' . $outPut . ')';  
  11.     }  
  12.     echo $outPut;  
  13.     Yii::app()->end();  
  14. }  
  如果json字符串的key缺少双引括起来,则json_decode会失败,判断是否存在缺少双引括起来的key,如缺少则先用正则替换为"key",再进行json_decode操作
Java代码   收藏代码
  1. <?php  
  2. /** 兼容key没有双引括起来的JSON字符串解析 
  3. * @param String $str JSON字符串 
  4. * @param boolean $mod true:Array,false:Object 
  5. * @return Array/Object 
  6. */  
  7. function ext_json_decode($str, $mode=false){  
  8.   if(preg_match('/\w:/', $str)){  
  9.     $str = preg_replace('/(\w+):/is''"$1":', $str);  
  10.   }  
  11.   return json_decode($str, $mode);  
  12. }  
  13.    
  14. $str1 = '{name:"fdipzone"}';  
  15. var_dump(ext_json_decode($str1, true)); // array(1) { ["name"]=> string(8) "fdipzone" }  
  16. ?>  
  Json只支持 utf-8 编码,所有用header 
Java代码   收藏代码
  1. <?php  
  2. /************************************************************** 
  3.  * 
  4.  * 使用特定function对数组中所有元素做处理 
  5.  * @param    string    &$array        要处理的字符串 
  6.  * @param    string    $function    要执行的函数 
  7.  * @return boolean    $apply_to_keys_also        是否也应用到key上 
  8.  * @access public 
  9.  * 
  10.  *************************************************************/  
  11. function arrayRecursive(&$array, $function, $apply_to_keys_also = false) {  
  12.     static $recursive_counter = 0;  
  13.     if (++$recursive_counter > 1000) {  
  14.         die('possible deep recursion attack');  
  15.     }  
  16.     foreach ($array as $key => $value) {  
  17.         if (is_array($value)) {  
  18.             arrayRecursive($array[$key], $function, $apply_to_keys_also);  
  19.         } else {  
  20.             $array[$key] = $function($value);  
  21.         }  
  22.   
  23.         if ($apply_to_keys_also && is_string($key)) {  
  24.             $new_key = $function($key);  
  25.             if ($new_key != $key) {  
  26.                 $array[$new_key] = $array[$key];  
  27.                 unset($array[$key]);  
  28.             }  
  29.         }  
  30.     }  
  31.     $recursive_counter--;  
  32. }  
  33.   
  34. /************************************************************** 
  35.  * 
  36.  * 将数组转换为JSON字符串(兼容中文) 
  37.  * @param    array    $array        要转换的数组 
  38.  * @return string        转换得到的json字符串 
  39.  * @access public 
  40.  * 
  41.  *************************************************************/  
  42. function JSON($array) {  
  43.     arrayRecursive($array, 'urlencode'true);  
  44.     $json = json_encode($array);  
  45.     return urldecode($json);  
  46. }  
  47. $array = array(  
  48.     'Name' => '希亚',  
  49.     'Age' => 20  
  50. );  
  51. header("Cache-Control: no-cache, no-store, must-revalidate, max-age=-1");  
  52. header("Content-Type: application/json; charset=utf-8");  
  53. echo JSON($array);  
  54. echo "<br/>";  
  55. print_r(json_decode(JSON($array)));  
  56.   
  57. echo "<br/>------default------<br/>";  
  58. $tt = json_encode($array);  
  59. print_r($tt);  
  60. echo "<br/>";  
  61. exit(json_decode($tt));  
  62. ?>  

{"Name":"希亚","Age":"20"}
stdClass Object ( [Name] => 希亚 [Age] => 20 ) 
------default------
{"Name":"\u5e0c\u4e9a","Age":20}
stdClass Object ( [Name] => 希亚 [Age] => 20 )

打印json_decode结果  json_decode加了true参数会返回关联数组,否则出现stdClass Object对象

相关文章
|
2月前
|
JSON PHP 数据格式
|
2月前
|
JSON Java 数据安全/隐私保护
java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
122 1
|
2月前
|
PHP 开发者
【专栏】介绍PHP的命名空间,它是一个用于封装代码、避免名称冲突的机制
【4月更文挑战第27天】本文介绍了PHP的命名空间,它是一个用于封装代码、避免名称冲突的机制。命名空间的作用包括:防止大型项目中的命名冲突,提升代码可读性和可维护性,以及方便代码重用。文章详细阐述了如何定义、导入命名空间,使用完全限定名称以及设置命名空间别名。通过实例展示了命名空间在项目模块划分和第三方库如Laravel中的应用,强调了命名空间在组织和管理PHP代码中的关键作用。
|
16天前
|
Serverless PHP
【PHP常用函数封装】 php 判断两个数组所有的值是否是完全相等
【PHP常用函数封装】 php 判断两个数组所有的值是否是完全相等
21 3
|
16天前
|
Serverless PHP
【PHP常用函数封装】 php 判断a数组里是否完全包含b数组
【PHP常用函数封装】 php 判断a数组里是否完全包含b数组
16 1
|
1月前
|
JSON PHP 数据格式
蓝易云 - PHP用CURL发送Content-type为application/json的POST请求方法
在这段代码中,我们首先创建了一个包含我们要发送的数据的数组,并使用 `json_encode`函数将其转换为JSON格式。然后,我们初始化了一个cURL会话,并设置了一些选项,包括POST请求方法、要发送的数据、返回结果和HTTP头部信息。最后,我们执行了cURL请求并关闭了会话。
37 2
|
1月前
|
Web App开发 API PHP
PHP封装的不错的一个Curl方法
This is a PHP function named `teacher_curl` that wraps around the cURL library for making HTTP requests. The function initializes a cURL session, sets various options such as disabling SSL verification, sets headers, handles POST data
54 0
|
2月前
|
JSON JavaScript PHP
PHP把unicode编码的json字符串转中文
PHP把unicode编码的json字符串转中文
24 0