php如何和c进行数据交换,PHP与 后台c交换数据 | 学步园
為什么要用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代碼??
typedefstructcJSON?{
structcJSON?*next,*prev;//?數組?對象數據中用到
structcJSON?*child;//?數組?和對象中指向子數組對象或值
inttype;//?元素的類型,如是對象還是數組
char*valuestring;//?如果是字符串
intvalueint;//?如果是數值
doublevaluedouble;//?如果類型是cJSON_Number
char*string;//?The?item's?name?string,?if?this?item?is?the?child?of,?or?is?in?the?list?of?subitems?of?an?object.
}?cJSON;
比如你有一個json數據
Javascript代碼??
{
"name":"Jack?(\"Bee\")?Nimble",
"format":?{
"type":"rect",
"width":??????1920,
"height":?????1080,
"interlace":false,
"frame?rate":?24
}
}
那么你可以1:講字符串解析成json結構體。
C代碼??
cJSON?*root?=?cJSON_Parse(my_json_string);
2:獲取某個元素
C代碼??
cJSON?*format?=?cJSON_GetObjectItem(root,"format");
intframerate?=?cJSON_GetObjectItem(format,"frame?rate")->valueint;
3:講json結構體轉換成字符串
C代碼??
char*rendered=cJSON_Print(root);
4:刪除
C代碼??
cJSON_Delete(root);
5:構建一個json結構體
C代碼??
cJSON?*root,*fmt;
root=cJSON_CreateObject();
cJSON_AddItemToObject(root,?"name",?cJSON_CreateString("Jack?(\"Bee\")?Nimble"));
cJSON_AddItemToObject(root,?"format",?fmt=cJSON_CreateObject());
cJSON_AddStringToObject(fmt,"type","rect");
cJSON_AddNumberToObject(fmt,"width",????????1920);
cJSON_AddNumberToObject(fmt,"height",???????1080);
cJSON_AddFalseToObject?(fmt,"interlace");
cJSON_AddNumberToObject(fmt,"frame?rate",???24);
也是一樣方便的。
其實個人理解的json也是字符串,前后臺如何傳遞字符串呢?
可以通過數據庫。也可以通過文件。
也可以通過前臺直接放入函數入庫(不夠靈活)。
總結
以上是生活随笔為你收集整理的php如何和c进行数据交换,PHP与 后台c交换数据 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php文件写入加1,PHP关于文件与目录
- 下一篇: php while结束循环吗,php w