PHP 5.2 以前未內建 JSON 擴展,或生產環境未安裝 php-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,可直接利用其 evalJSON() / $.parseJSON() 解析後端輸出的 JSON 字串,後端只需輸出符合格式的字串(甚至可手動拼接簡單結構)。
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),原生函數效能最高、相容性最好。上述方案僅為遷移期或受限環境臨時應對。