基本用法
$arr = [
'a' => 'www.111cn.net',
'b' => 'cc',
'c' => 3,
'd' => 4,
'e' => 5
];
// 陣列 → JSON 字串
$json = json_encode($arr);
echo $json; // {"a":"www.111cn.net","b":"cc","c":3,"d":4,"e":5}
// JSON → PHP 變數(預設回傳物件)
$obj = json_decode($json);
var_dump($obj); // object(stdClass)#1 (5) { ["a"]=> string(14) "www.111cn.net" ... }
// JSON → 關聯陣列(第 2 參數 true)
$arr2 = json_decode($json, true);
var_dump($arr2); // array(5) { ["a"]=> string(14) "www.111cn.net" ... }
關鍵選項(第 2、3 參數)
| 常數 | 用途 |
| JSON_PRETTY_PRINT | 美化縮排輸出(除錯用) |
| JSON_UNESCAPED_UNICODE | **不轉義中文**,直接輸出可讀字元(PHP 5.4+) |
| JSON_UNESCAPED_SLASHES | 不轉義 / 號 |
| JSON_NUMERIC_CHECK | 數字字串轉為數值型別 |
| JSON_FORCE_OBJECT | 索引陣列強制輸出為物件 |
實用範例
美化輸出 + 中文不轉義
$json = json_encode($arr, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
"a": "www.111cn.net",
"b": "cc",
"c": 3,
"d": 4,
"e": 5
}
*/
索引陣列 vs 關聯陣列輸出差異
echo json_encode(['a', 'b', 'c']); // ["a","b","c"] 索引陣列 → JSON Array
echo json_encode(['id' => 'test']); // {"id":"test"} 關聯陣列 → JSON Object
echo json_encode(['id' => 'test'], JSON_FORCE_OBJECT); // {"0":"test"} 強制物件
自訂 JSON 格式化函式(不依賴 JSON_PRETTY_PRINT)
function json_format(string $json): ?string {
$tab = ' ';
$new = '';
$level = 0;
$inStr = false;
$len = strlen($json);
for ($i = 0; $i < $len; $i++) {
$char = $json[$i];
switch ($char) {
case '{': case '[':
if (!$inStr) {
$new .= $char . "\n" . str_repeat($tab, ++$level);
} else { $new .= $char; }
break;
case '}': case ']':
if (!$inStr) {
$new .= "\n" . str_repeat($tab, --$level) . $char;
} else { $new .= $char; }
break;
case ',':
if (!$inStr) { $new .= ",\n" . str_repeat($tab, $level); }
else { $new .= $char; }
break;
case ':':
if (!$inStr) { $new .= ': '; }
else { $new .= $char; }
break;
case '"':
$inStr = !$inStr;
$new .= $char;
break;
default:
$new .= $char;
}
}
return $new;
}
中文編碼陷阱與解決
- PHP 5.4+:直接用
JSON_UNESCAPED_UNICODE
- 舊版 PHP:先
urlencode() 再 json_encode(),前端 JS 用 decodeURIComponent() 還原
- 資料庫/檔案儲存建議統一 UTF-8,避免 GBK/Big5 混雜導致
json_encode 回傳 false
- 檢查錯誤:
json_last_error()、json_last_error_msg()
原始來源:www.111cn.net
copyright ©
萬盛學電腦網 all rights reserved