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

PHP json_encode 陣列輸出中括號 [] 與大括號 {} 差異解析

     編輯:PHP 綜合知識

json_encode 陣列編碼:索引陣列 vs 關聯陣列

json_encode 輸出格式取決於陣列鍵值結構:

  • 連續數字索引從 0 開始 → 輸出 JSON 陣列 [...](中括號)
  • 非連續、非從 0 開始、或含字串鍵 → 輸出 JSON 物件 {...}(大括號)

範例對照

<?php
// 連續索引陣列
$arr1 = [1, 2, 3];           // 等同 array(1,2,3)
echo json_encode($arr1);     // [1,2,3]

// 刪除索引 0 導致不連續
$arr2 = [1, 2, 3];
unset($arr2[0]);
echo json_encode($arr2);     // {"1":2,"2":3}

// 明確指定字串鍵
$arr3 = ['a' => 1, 'b' => 2];
echo json_encode($arr3);     // {"a":1,"b":2}
?>

json_decode 還原行為

JSON 格式預設還原json_decode($json, true)
[1,2,3]索引陣列索引陣列
{"1":2,"2":3}stdClass 物件關聯陣列

最佳實踐建議

  1. 統一使用 json_decode($json, true):強制回傳關聯陣列,避免物件/陣列混用導致 Cannot use object of type stdClass as array 錯誤。
  2. API 介面文件明確定義格式:列表型資料一律用陣列 [],單一資源用物件 {}。
  3. PHP 端編碼時可強制輸出物件:json_encode($arr, JSON_FORCE_OBJECT) 將索引陣列也編為物件。
  4. 避免「稀疏陣列」:若需保留索引語意,改用物件 ['idx_0' => val, 'idx_2' => val]。

常見坑點

<?php
$data = ['items' => [1, 2, 3]];
// 取出子陣列處理後重新塞回
$data['items'] = array_values($data['items']); // 重置索引確保連續
echo json_encode($data); // {"items":[1,2,3]} 正確輸出陣列格式
?>

使用 array_values() 重建連續索引,確保 JSON 輸出穩定為陣列格式。

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