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

PHP 5.2 以下版本缺失 json_decode 的替代實現方案

     編輯:PHP 相關知識

背景

PHP 5.2 才內建 json_decode,舊版本需自行實現或使用第三方庫。

簡易替代函數(返回陣列)

<?php
function json_decode2($json) {
    $comment = false;
    $out = '$x=';
    for ($i=0; $i<strlen($json); $i++) {
        if (!$comment) {
            if ($json[$i]=='{' || $json[$i]=='[') $out .= ' array(';
            elseif ($json[$i]=='}' || $json[$i]==']') $out .= ')';
            elseif ($json[$i]==':') $out .= '=>';
            else $out .= $json[$i];
        } else {
            $out .= $json[$i];
        }
        if ($json[$i]=='"' && $json[$i-1]!='\\') $comment = !$comment;
    }
    eval($out . ';');
    return $x;
}
?>

缺點:使用 eval 有安全風險,且只返回陣列,不支援物件。

更完善方案:Services_JSON 庫

PEAR Services_JSON 類純 PHP 實現,支援物件與陣列雙向轉換,相容 PHP 4/5:

require_once 'Services/JSON.php';
$json = new Services_JSON();
$arr  = $json->decode($jsonString);
$str  = $json->encode($phpVar);

下載:PEAR Services_JSON 或 GitHub 眾多移植版。

建議

  • 生產環境務必升級 PHP ≥ 5.6(已 EOL),使用原生 json_encode/decode。
  • 若必須維護舊版,請採用成熟庫而非自寫 eval 方案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved