JSON(JavaScript Object Notation)以輕量級、跨語言、易讀寫特性成為主流資料交換格式。其核心只有兩種結構——物件與陣列,對應 PHP 的關聯陣列與索引陣列。本文透過規範定義、範例對照、PHP 編解碼行為,釐清兩者差異與轉換邏輯。
, 分隔: 映射[] 表示(有序集合){} 表示(無序鍵值集合)<?php
$arr1 = array(111, 'aaa', 'bbb'); // 索引陣列
$arr2 = array('a' => 'aaa', 'b' => 222); // 關聯陣列
$arr3 = array('a' => 'aaa', 'other' => array('bbb', 1111)); // 巢狀混合
echo json_encode($arr1); // [111,"aaa","bbb"] → JSON 陣列
echo json_encode($arr2); // {"a":"aaa","b":222} → JSON 物件
echo json_encode($arr3); // {"a":"aaa","other":["bbb",1111]} → 物件含陣列
?>
[]{}$json = '{"a":"aaa","other":["bbb",1111]}';
$obj = json_decode($json); // stdClass 物件
$arr = json_decode($json, true); // 關聯陣列(第二參數 true)
json_encode 僅支援 UTF-8 編碼輸入json_decode 預設回傳物件,加 true 回傳關聯陣列JSON_UNESCAPED_UNICODE、JSON_FORCE_OBJECT 等選項| 場景 | 建議結構 | PHP 寫法 |
|---|---|---|
| API 回傳列表資料 | 陣列 [] | $list = array_values($data); 確保索引重排 |
| API 回傳單筆實體 | 物件 {} | (object)$data 或 JSON_FORCE_OBJECT |
| 前端元件需固定欄位順序 | 物件 {} | 明確定義鍵名順序,避免索引陣列語意模糊 |
理解 JSON 物件與陣列的語意差異,並掌握 PHP 陣列鍵名如何影響輸出結構,是前後端協作無誤的關鍵。建立統一的資料結構規範(如:列表必為陣列、實體必為物件),可大幅減少溝通成本與解析錯誤。
延伸閱讀:專題《PHP 字串用法總結》、《PHP 陣列操作技巧大全》。