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

PHP json_decode 回傳 stdClass 無法用陣列方式存取的解決方法

     編輯:PHP 綜合知識

錯誤情境

$json = '{"name":"John","age":30}';
$res = json_decode($json);
echo $res['name'];  // 錯誤:Cannot use object of type stdClass as array

json_decode() 預設回傳 stdClass 物件,不能用 [] 陣列語法存取。

解決方法一:第二參數設為 true (推薦)

$res = json_decode($json, true);  // 強制回傳關聯陣列
echo $res['name'];  // 正常輸出 "John"

解決方法二:使用物件屬性存取語法

$res = json_decode($json);  // 預設回傳物件
echo $res->name;            // 使用 -> 存取屬性

巢狀結構範例

$json = '{"user":{"id":1,"tags":["php","json"]},"status":true}';

// 方法一:陣列
$data = json_decode($json, true);
echo $data['user']['tags'][0];  // php

// 方法二:物件
$obj = json_decode($json);
echo $obj->user->tags[0];       // php

常見錯誤補充

  • JSON 格式錯誤:json_decode 回傳 null,請用 json_last_error() / json_last_error_msg() 診斷。
  • 大數值精度:PHP 預設將大整數轉為浮點數,需用 JSON_BIGINT_AS_STRING 旗標 (PHP 5.4+) 保持字串。
  • 深度限制:預設遞迴深度 512,可用第三參數調整。
// 完整範例:錯誤處理 + 大整數保持字串
$json = '{"big_id": 12345678901234567890}';
$data = json_decode($json, true, 512, JSON_BIGINT_AS_STRING);
if (json_last_error() !== JSON_ERROR_NONE) {
    throw new Exception('JSON 解析失敗: ' . json_last_error_msg());
}
var_dump($data['big_id']); // string(20) "12345678901234567890"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved