如何正確解決PHP缺少JSON包問題
PHP語言為我們帶來了許多方便之處,但是在實際操作中發(fā)現(xiàn),它并不是很容易掌握的。在我的一個網(wǎng)站項目開發(fā)中,沒有PHP5.2的環(huán)境。因此就會發(fā)生PHP缺少JSON包的問題。 #t#
這一問題的替代辦法就是重寫PHP json 的json_decode 和 json_encode方法。
這兩個PHP缺少JSON包的解決方法主要就是把數(shù)組,字符串,或者對象 轉(zhuǎn)換成 json格式的數(shù)據(jù)(特殊的一種結(jié)構(gòu)體格式) 。首先需要的是json_encode方法, 此方法 主要將 數(shù)組,字符串,對象等轉(zhuǎn)換成json格式。解決此問題的方法:
a. 簡單版:
直接針對自己的問題需要(自己只需要將簡單的數(shù)組進行操作),可以直接將此數(shù)組進行拼串。
b。完善的 encode方法:
解決PHP缺少JSON包的問題的簡單方法就是 利用別人以完成的開源代碼:
首先想到 zend framework。 拿來 zf_json 包中的 Decoder.PHP, 和 Encoder.PHP。 Decoder.PHP其實只要將其中某個protect方法的 protect去掉就行。 具體操作忘了,讀者自行調(diào)試來解決。改寫好Decoder 類后,調(diào)用如下:
- $filepath = $_SERVER['DOCUMENT_ROOT'];
- include $filepath.'/inc/json/Encoder.PHP';
- $encoder = new Zend_Json_Encoder(false);
- $json = $encoder ->encode($result);
- header("X-JSON: $json");
json_decode方法同上,如果是PHP使用。
由于很多使用json的地方還是在ajax調(diào)用中, 所以一些ajax '框架' 提供了decode方法來解決PHP缺少JSON包這一問題:
比如在prototype中, 如果PHP頁面包含了prototype.js, 那么就可以直接來調(diào)用 function(transport, json) { 。。操作} 在其中取json數(shù)據(jù) 就是 json.a , json.b 等了。
除了PHP缺少JSON包這一問題的出現(xiàn)外,可能遇到問題,編碼。
zend framework返回的漢字編碼估計不大對應(yīng)(不是說它不是utf-8)我的頁面編碼(utf-8),因此會有問題出現(xiàn)。因此對于某些驗證返回的報錯信息(漢字)會有影響。在這里的替代方法就是使用傳統(tǒng)的接口返回數(shù)字代碼形式(通信網(wǎng)關(guān)經(jīng)常采用的方法),比如返回 json.code 有 0,1,2,3等多種可能。則在js端處理時, 0表示成功,1表示非法的客戶端數(shù)據(jù),等等。 問題得到完美解決。