json_encode 輸出格式取決於陣列鍵值結構:
[...](中括號){...}(大括號)<?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 格式 | 預設還原 | json_decode($json, true) |
|---|---|---|
[1,2,3] | 索引陣列 | 索引陣列 |
{"1":2,"2":3} | stdClass 物件 | 關聯陣列 |
json_decode($json, true):強制回傳關聯陣列,避免物件/陣列混用導致 Cannot use object of type stdClass as array 錯誤。[],單一資源用物件 {}。json_encode($arr, JSON_FORCE_OBJECT) 將索引陣列也編為物件。['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 輸出穩定為陣列格式。