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

JSON 格式化與 PHP serialize 序列化完整比較:前後端交互與資料儲存選型指南

     編輯:PHP 相關知識

一、JSON 格式化

1. JSON 是什麼?

輕量級資料交換格式,語言無關,易讀寫、機器易解析。現代 Web API 實質標準。

2. PHP 核心函數

  • json_encode($value, $flags, $depth):PHP 變數 → JSON 字串
  • json_decode($json, $assoc, $depth, $options):JSON 字串 → PHP 變數($assoc=true 回傳關聯陣列)

3. 實作範例

<?php
$arr = [
    'name' => '劉璐',
    'nick' => '璐小璐',
    'age' => 26,
    'contact' => [
        'phone' => '13718136109',
        'address' => 'Beijing ifdoo'
    ]
];

$json = json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;
// 輸出:
// {
//     "name": "劉璐",
//     "nick": "璐小璐",
//     "age": "26",
//     "contact": {
//         "phone": "13718136109",
//         "address": "Beijing ifdoo"
//     }
// }
?>

4. 前端 JavaScript 互動

<script>
var data = {"name":"劉璐","nick":"璐小璐","age":"26",...};
console.log(data.name); // 劉璐
// AJAX 取得後直接作為物件使用
fetch('/api/profile').then(r => r.json()).then(data => {
    document.getElementById('nick').textContent = data.nick;
});
</script>

5. 跨域腳本注入模式 (JSONP)

<?php
// profile.php
$json = json_encode($arr);
echo "getProfile($json);"; // 輸出可執行 JS
?>
<!-- index.html -->
<script src="./profile.php"></script>
<script>
function getProfile(data) { console.log(data.nick); }
</script>

二、serialize 序列化

1. 是什麼?

PHP 專有格式,保留型別、結構、物件類別資訊。適合 PHP 內部儲存(Session、快取、資料庫 Blob 欄位)。

2. 核心函數

  • serialize($value):變數 → 可儲存字串
  • unserialize($str):字串 → 還原變數

3. 格式解析

<?php
$arr = [
    "u1" => ["gameName" => "德乙", "homeName" => "比勒費爾德"],
    "u2" => ["gameName" => "英超", "homeName" => "水晶宮"]
];
echo serialize($arr);
// 輸出:
// a:2:{
//   s:2:"u1";a:2:{s:8:"gameName";s:6:"德乙";s:8:"homeName";s:15:"比勒費爾德";}
//   s:2:"u2";a:2:{s:8:"gameName";s:6:"英超";s:8:"homeName";s:9:"水晶宮";}
// }
// 格式:a=陣列, s=字串, i=整數, d=浮點, b=布林, O=物件, N=null

三、深度比較與選型指南

維度JSONserialize
跨語言支援✅ 完美❌ 僅 PHP
資料型別保真⚠️ 無整數/浮點/布林區分(皆為字串/數字)✅ 完整保留
物件支援⚠️ 僅 public 屬性,需實作 JsonSerializable✅ 含 private/protected、類別名
安全性✅ 安全(純資料)⚠️ 反序列化可觸發魔術方法(__wakeup 等),需謹慎
可讀性✅ 高❌ 低
體積較小較大(含型別標記)
效能快(C 層優化)較慢

四、選型建議

  • 前後端 API、跨服務通訊、設定檔、日誌 → JSON
  • PHP Session 儲存、快取物件、資料庫 Blob 欄位儲存複雜結構 → serialize(注意安全)
  • 現代替代:igbinary、msgpack、protobuf 提供更高效能與型別保真

五、安全警示

絕對不要 unserialize() 來自不可信來源的資料(用戶輸入、外部 API、Cookie),可能導致物件注入攻擊(POP 鏈)。JSON 無此風險。

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