這一問題的替代辦法就是重寫PHP json 的json_decode 和 json_encode方法。
這兩個PHP缺少JSON包的解決方法主要就是把數組,字符串,或者對象 轉換成 json格式的數據(特殊的一種結構體格式) 。首先需要的是json_encode方法, 此方法 主要將 數組,字符串,對象等轉換成json格式。解決此問題的方法:
a. 簡單版:
直接針對自己的問題需要(自己只需要將簡單的數組進行操作),可以直接將此數組進行拼串。
b。完善的 encode方法:
解決PHP缺少JSON包的問題的簡單方法就是 利用別人以完成的開源代碼:
首先想到 zend framework。 拿來 zf_json 包中的 Decoder.PHP, 和 Encoder.PHP。 Decoder.PHP其實只要將其中某個protect方法的 protect去掉就行。 具體操作忘了,讀者自行調試來解決。改寫好Decoder 類後,調用如下:
- $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調用中, 所以一些ajax '框架' 提供了decode方法來解決PHP缺少JSON包這一問題:
比如在prototype中, 如果PHP頁面包含了prototype.js, 那麼就可以直接來調用 function(transport, json) { 。。操作} 在其中取json數據 就是 json.a , json.b 等了。
除了PHP缺少JSON包這一問題的出現外,可能遇到問題,編碼。
zend framework返回的漢字編碼估計不大對應(不是說它不是utf-8)我的頁面編碼(utf-8),因此會有問題出現。因此對於某些驗證返回的報錯信息(漢字)會有影響。在這裡的替代方法就是使用傳統的接口返回數字代碼形式(通信網關經常采用的方法),比如返回 json.code 有 0,1,2,3等多種可能。則在js端處理時, 0表示成功,1表示非法的客戶端數據,等等。 問題得到完美解決。