1. 程式人生 > >json和xml封裝數據、數據緩存到文件中

json和xml封裝數據、數據緩存到文件中

用戶 lena 數據緩存 完全 數據類型 lin print 函數 response

一、APP的通信格式之xml

xml:擴展標記語言,可以用來標記數據,定義數據類型,是一種允許用戶對自己標記語言進行定義的源語言。XML格式統一,擴平臺語言,非常適合數據傳輸和通信,業界公認的標準。

支持操作系統:windows、linux

支持語言:python、php、java

技術分享

二、APP的通信格式之json

JSON是一種輕量級的數據交換語言,以文字為基礎,且易於讓人閱讀,同時也方便了機器進行解析和生成。

JSON簡單的說是javascript中的對象和數組,所以這兩種結構就是對象和數組兩種結構,通過這兩種結構可以表示各種復雜的結構,其可以將Javascript對象中表示的一組數據轉換為字符串,然後就可以在函數之間輕松的傳遞這個字符串,或者在異步應用程序中將字符串從Web客戶機傳遞給服務器端程序。

JSON采用完全獨立於程序語言的文本格式。JSON是理想的數據交換語言。

技術分享

三、APP的通信格式之區別

1、可讀性方面:xml比較好

2、生成數據方面:json較優(一個函數即可)

3、傳輸速度方面:json勝出

四、APP接口的作用

1、獲取數據

從數據或者緩存中獲取數據,然後通過接口數據返回給客戶端

2、提交數據

通過接口提交給服務器,然後服務器對數據進行入庫處理,並返回執行結果。

五、APP開發之APP接口

1、json方式封裝接口數據的方法

通信數據的標準格式:

code 狀態碼(200,400等)

message 提示信息(提示用戶的操作成功與失敗)

data 返回的數據

2、json方式封裝:php生成JSON數據

方法:json_encode($value);

註意:該函數只能接受UTF-8編碼的數據,如果傳遞其他格式的數據的話會返回NULL

六、使用json和xml封裝數據,代碼如下:

 1 <?php
 2     class Response{
 3         static public function datas($code,$message,$data,$type=‘json‘){
 4             switch($type){
 5                 case ‘json‘:
 6                 return
self::json($code,$message,$data); 7 break; 8 case ‘xml‘: 9 return self::xml($code,$message,$data); 10 break; 11 case ‘array‘: 12 $arr = array( 13 "code"=>$code, 14 "message" =>$message, 15 "data" =>$data, 16 ); 17 var_dump($arr); 18 break; 19 default: 20 break; 21 } 22 } 23 //xml為了安全性在前面加static 24 static public function xml($code,$message,$data){ 25 if(!is_numeric($code)){ 26 return false; 27 } 28 if($message && $data){ 29 $str = ‘<?xml version="1.0" encoding="UTF-8"> 30 <item> 31 <code>‘.$code.‘</code> 32 <message>‘.$message.‘</message> 33 <data>‘; 34 $str.=self::item($data); 35 $str.=‘</data> 36 </item>‘; 37 return $str; 38 }else{ 39 return false; 40 } 41 } 42 static public function item($data){ 43 $str = ""; 44 //打印var_dump($data); 45 foreach($data as $key =>$value){ 46 if(is_array($value)){ 47 $str .="<data$key>".self::item($value)."</data$key>\n"; 48 }else{ 49 $str .="<$key>{$value}</$key>\n"; 50 } 51 } 52 return $str; 53 } 54 //json 55 static public function json($code,$message,$data){ 56 if(!is_numeric($code)){ 57 return false 58 } 59 if($message && $data){ 60 $arr = array( 61 "code"=>$code, 62 "message" =>$message, 63 "data" =>$data, 64 ); 65 return json_encode($arr); 66 }else{ 67 return false; 68 } 69 } 70 } 71 $data = array( 72 array("name"=>"張三","age"=>"10"), 73 array("name"=>"李煜","age"=>"20"), 74 array("name"=>"李濤","age"=>"18"), 75 array("name"=>"馬華","age"=>"20"), 76 array("name"=>"王子涵","age"=>"20"), 77 array("name"=>"李麗","age"=>"22"), 78 ); 79 $type = isset($_GET[‘type‘])?$_GET[‘type‘]:‘json‘; 80 echo Response::datas("200","成功",$data,$type) 81 ?>

七、數據緩存到文件中,代碼如下:

 1 <?php
 2     class Files{
 3         public $dir;
 4         public $ext = ‘.txt‘;
 5         public $path;
 6         public function __construct(){
 7             $this->dir=dirname(__FILE__).‘/data/‘;
 8         }
 9         //緩存數據
10         public function CacheData($data,$paths,$time,$filename){
11         //設置緩存文件
12             $this->path=$this->dir.$paths.$filename.$this->ext;
13             if(!file_exists(dirname($this->path))){
14                 mkdir(dirname($this->path));
15             }
16             if($data){
17                 // 設置數據,不足10位用0補全
18                 $str = sprintf(‘010%d‘,$time).$data.time();
19                 //數據存在的話,對數據進行緩存
20                 file_put_contents($this->path,$str);
21             }else{    
22                 //判斷文件是否存在
23                 if(!file_exists($this->path)){
24                     return false;
25                 }
26                 //如果數據為空,刪除緩存
27                 if(is_null($data)){
28                     //刪除文件
29                     unlink($this->path);
30                 }
31                 //定時更新
32                 $datas=file_get_contents($this->path);
33                 $cacheTime=substr($datas,0,10);
34                 $oldTime =substr($datas,-10);
35                 if($oldTime+$cacheTime >time()){
36                     return substr($datas,10,-10);
37                 }else{
38                     return false;
39                 }
40             }
41         }
42     }
43     include "Response.php";
44     header(‘content-type:text/html;charset=utf-8‘);
45     $model=new Files();    
46     //刪除緩存
47     $model->CacheData(null,‘user‘,‘‘,‘file1‘);
48     //$model->CacheData(‘數據‘,緩存到哪個文件中,緩存時間,‘文件名file1‘)
49     //把數據緩存到data文件下的user文件夾的stem.txt中
50     //讀取緩存
51     if($data=$model->CacheData(‘123‘,‘/user/‘,100,‘file1‘)){
52         $data=json_decode($data,true);
53         var_dump($data);
54         echo "從文件獲取數據";
55     }else{
56         //設置緩存
57         echo "設置數據";
58         $data = array(
59                  array("name"=>"張三","age"=>"10"),
60                  array("name"=>"李煜","age"=>"20"),
61                  array("name"=>"李濤","age"=>"18"),
62                  array("name"=>"馬華","age"=>"20"),
63                  array("name"=>"王子涵","age"=>"20"),
64                  array("name"=>"李麗","age"=>"22"),
65             );
66             var_dump($data);
67             $str= Response::datas("200","成功",$data);
68         $model->CacheData($str,‘/user/‘,100,‘file1‘);
69     }
70 ?>

json和xml封裝數據、數據緩存到文件中