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

PHP JSON 操作完全指南:編碼、解碼與實戰技巧

     編輯:PHP 相關知識

JSON 簡介

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_encode 位掩碼)

  • 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);

實戰:調用天氣 API

<?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。
  • 大數字精度丟失:JS 數字為 IEEE 754 雙精度,PHP json_encode 大整數可能超出安全範圍,建議以字符串傳輸 ID。
  • BOM 頭干擾:讀取含 BOM 文件需先去除 \xEF\xBB\xBF。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved