JSON (JavaScript Object Notation) 是基於 ECMA-262 第 3 版標準的輕量級數據交換格式,語言無關、跨平台、易讀寫,已成為 Web API 事實標準。
| 函數 | 用途 | 返回值 |
|---|---|---|
json_encode() | 變量 → JSON 字符串 | 字符串 / false |
json_decode() | JSON 字符串 → PHP 變量 | object / array / null |
json_last_error() | 獲取最近一次錯誤碼 | int |
json_last_error_msg() | 獲取可讀錯誤信息 (PHP 5.5+) | string |
<?php
// 編碼
$arr = [1,2,3,4,5,6,7,8,9,'Hello','PHP'];
echo json_encode($arr); // [1,2,3,4,5,6,7,8,9,"Hello","PHP"]
// 解碼(預設返回 stdClass 對象)
$json = '{"h":"Hello","w":"World","0":[3,2,1]}';
$obj = json_decode($json);
echo $obj->h; // Hello
// 解碼為關聯數組(第 2 參數 true)
$arr = json_decode($json, true);
echo $arr['h']; // Hello
?>
JSON_HEX_TAG、JSON_HEX_APOS、JSON_HEX_QUOT、JSON_HEX_AMP:轉義 HTML 特殊字符,防 XSS。JSON_UNESCAPED_UNICODE:不轉義中文等 Unicode 字符,輸出可讀、體積更小。JSON_UNESCAPED_SLASHES:不轉義 /,URL 更清爽。JSON_NUMERIC_CHECK:數值字符串轉為數字類型。JSON_PRETTY_PRINT:格式化縮進,調試友好。JSON_PRESERVE_ZERO_FRACTION:保留浮點數 .0。echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
<?php
$url = 'https://api.example.com/weather?city=beijing';
$json = file_get_contents($url);
if ($json === false) { die('請求失敗'); }
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
die('JSON 解析失敗: ' . json_last_error_msg());
}
echo "溫度: {$data['temp']}°C, 天氣: {$data['condition']}";
?>
json_encode(fopen(...)) 返回 false。$a = []; $a[] = &$a; json_encode($a) 觸發 JSON_ERROR_RECURSION。json_encode 大整數可能超出安全範圍,建議以字符串傳輸 ID。\xEF\xBB\xBF。