JSON 是現代 Web API 標準數據格式,PHP 通過 json_decode() 解析。本文通過實例演示正確用法、參數含義、巢狀結構訪問、以及常見編碼/格式錯誤處理。
<?php
$data = "[";
for ($i = 0; $i < 20; $i++) {
$data .= "{";
$data .= "\"id\":\"110\",";
$data .= "\"name\":\"110\",";
$data .= "\"original_price\":\"110\",";
$data .= "\"sale_price\":\"110\",";
$data .= "\"introduce\":\"110\",";
$data .= "\"content\":\"110\",";
$data .= "\"nums\":110";
$data .= "}";
if ($i < 19) $data .= ",";
}
$data .= "]";
// $data 現在是合法的 JSON 字符串(數組包含 20 個對象)
<?php
$array = array();
$de_json = json_decode($data, true); // true 返回關聯數組
$count = count($de_json);
for ($i = 0; $i < $count; $i++) {
$array[$i]["id"] = $de_json[$i]['id'];
$array[$i]["name"] = $de_json[$i]['name'];
$array[$i]["original_price"] = $de_json[$i]['original_price'];
// 注意:原代碼此處錯誤用 json_encode,應直接賦值
$array[$i]["sale_price"] = $de_json[$i]['sale_price'];
}
var_dump($array);
<?php
$json_string = '{"status":"Success","request":{"method":"POST","parameters":[{"name":"email","value":"test@test.com"}]},"logon_user":{"guid":108142,"email":"test@test.com"}}';
$obj = json_decode($json_string); // 默認返回對象
echo $obj->logon_user->guid; // 輸出 108142
// 或獲取關聯數組
$arr = json_decode($json_string, true);
echo $arr['logon_user']['guid'];
| 參數/情況 | 說明 |
|---|---|
json_decode($json, true) | 第二參數 true 強制返回關聯數組,否則返回 stdClass 對象 |
| JSON 語法錯誤 | 尾隨逗號、單引號、未轉義控制字符、BOM 頭會導致解析失敗返回 null |
json_last_error() | 解析失敗時調用獲取錯誤碼,配合 json_last_error_msg() (PHP 5.5+) 獲取描述 |
| 大數字精度丟失 | PHP 整數超出範圍會轉浮點,大整數建議以字符串形式傳輸 |
| 深度遞歸限制 | 默認 512 層,可通過 json_decode($json, false, 1024) 第三參數調整 (PHP 7.1+) |
var_dump(json_last_error()) 確認無錯誤。true 參數獲取數組,便於統一處理。json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) 保持中文可讀、避免斜槓轉義。