首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 缺少 JSON 擴展時的替代方案:Zend Json 或手動實現

     編輯:PHP 相關知識

背景

PHP 5.2 以前未內建 JSON 擴展,或生產環境未安裝 php-json,需替代方案。

方案一:使用 Zend Framework Json 組件(推薦)

<?php
require_once 'Zend/Json/Encoder.php';
require_once 'Zend/Json/Decoder.php';

$encoder = new Zend_Json_Encoder();
$json = $encoder->encode($data);

$decoder = new Zend_Json_Decoder();
$data = $decoder->decode($json);
?>

優點:完整實現 JSON 規範,支援物件、陣列、字串轉換,效能可接受。

方案二:前端框架內建解析(Prototype, jQuery)

若專案已引入 Prototype/jQuery,可直接利用其 evalJSON() / $.parseJSON() 解析後端輸出的 JSON 字串,後端只需輸出符合格式的字串(甚至可手動拼接簡單結構)。

方案三:手寫簡易 encode/decode(僅簡單結構)

function simple_json_encode($data) {
    if (is_array($data)) {
        $isList = array_keys($data) === range(0, count($data)-1);
        $parts = array_map('simple_json_encode', $data);
        return $isList ? '[' . implode(',', $parts) . ']' : '{' . implode(',', array_map(function($k,$v){"return json_encode($k).':'.$v";}, array_keys($data), $parts)) . '}';
    }
    if (is_string($data)) return '"' . addcslashes($data, "\"\n\r\t/") . '"';
    if (is_bool($data)) return $data ? 'true' : 'false';
    if (is_null($data)) return 'null';
    return (string)$data; // 數值
}

缺點:不支援巢狀物件、Unicode 轉義、浮點數精度等,僅供極簡場景應急。

編碼問題補充

Zend Json 輸出為 UTF-8,若專案為 GBK,需在輸出前 iconv('UTF-8', 'GBK//IGNORE', $json),或統一專案編碼為 UTF-8(強烈建議)。

結論

生產環境**務必安裝原生 json 擴展**(yum install php-json / apt install php-json),原生函數效能最高、相容性最好。上述方案僅為遷移期或受限環境臨時應對。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved