现在的位置: 首页 > 综合 > 正文

PHP与 后台c交换数据

2013年11月21日 ⁄ 综合 ⁄ 共 2505字 ⁄ 字号 评论关闭

为什么要用json

跟XML相比,JSON的优势在于格式简洁短小,特别是在处理大量复杂数据的时候,这个优势便显得非常突出。从各浏览器的支持来看,JSON解决了因不同浏览器对XML DOM解析方式不同而引起的问题

目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。

我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识。

从5.2版本开始,PHP原生提供json_encode()json_decode()函数,前者用于编码,后者用于解码。

一、json_encode()

该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:


  $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
  
  echo json_encode($arr);
  

结果为


  {"a":1,"b":2,"c":3,"d":4,"e":5}
  

再看一个对象转换的例子:


  $obj->body           = 'another post';
  
  $obj->id             = 21;
  
  $obj->approved       = true;
  
  $obj->favorite_count = 1;
  
  $obj->status         = NULL;
  
  echo json_encode($obj);
  

结果为


  {
    "body":"another post",
  
    "id":21,
  
    "approved":true,
  
    "favorite_count":1,
  
    "status":null
  } 
  

由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时候,这一点要特别注意。

前文出自:http://www.ruanyifeng.com/blog/2011/01/json_in_php.html

从上面的介绍,我们可以知道php对json的支持可以说是做到非常方便了。那c呢?

先看json的数据结构 
c中没有对象,所以json数据是采用链表存储的 

C代码  收藏代码
  1. typedef struct cJSON {  
  2.     struct cJSON *next,*prev;   // 数组 对象数据中用到  
  3.     struct cJSON *child;        // 数组 和对象中指向子数组对象或值  
  4.   
  5.     int type;           // 元素的类型,如是对象还是数组  
  6.   
  7.     char *valuestring;          // 如果是字符串  
  8.     int valueint;               // 如果是数值  
  9.     double valuedouble;         // 如果类型是cJSON_Number  
  10.   
  11.     char *string;               // The item's name string, if this item is the child of, or is in the list of subitems of an object.  
  12. } cJSON;  



比如你有一个json数据 

Javascript代码  收藏代码
  1. {  
  2.     "name""Jack (\"Bee\") Nimble",   
  3.     "format": {  
  4.         "type":       "rect",   
  5.         "width":      1920,   
  6.         "height":     1080,   
  7.         "interlace":  false,   
  8.         "frame rate": 24  
  9.     }  
  10. }  



那么你可以 
1:讲字符串解析成json结构体。 

C代码  收藏代码
  1. cJSON *root = cJSON_Parse(my_json_string);  


2:获取某个元素 

C代码  收藏代码
  1. cJSON *format = cJSON_GetObjectItem(root,"format");  
  2. int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint;  


3:讲json结构体转换成字符串 

C代码  收藏代码
  1. char *rendered=cJSON_Print(root);  


4:删除 

C代码  收藏代码
  1. cJSON_Delete(root);  


5:构建一个json结构体 

C代码  收藏代码
  1. cJSON *root,*fmt;  
  2. root=cJSON_CreateObject();    
  3. cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));  
  4. cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());  
  5. cJSON_AddStringToObject(fmt,"type",     "rect");  
  6. cJSON_AddNumberToObject(fmt,"width",        1920);  
  7. cJSON_AddNumberToObject(fmt,"height",       1080);  
  8. cJSON_AddFalseToObject (fmt,"interlace");  
  9. cJSON_AddNumberToObject(fmt,"frame rate",   24);
     

也是一样方便的。

其实个人理解的json也是字符串,前后台如何传递字符串呢?

可以通过数据库。也可以通过文件。

也可以通过前台直接放入函数入库(不够灵活)。

抱歉!评论已关闭.